2016-08-11 5 views
0

私はRoRで書かれたブログのウェブサイトで働いており、ソーサリーの問題に立ち往生しています。シンプルなログインを作成するために、ドキュメントからチュートリアルを行いました。私の問題は、電子メールを使ってログイン時のユーザーを特定することです。ソーサリー簡単なユーザ名でログインします

私はセッションコントローラを変更して、電子メールではなくパラメータとしてユーザー名を送信し、それに応じてビューを変更しようとしました。

ログには、すべて正常に動作し、ユーザー名とパスワードがデータベースに渡されます。しかし、私は解決策を見つけることができません。生成されるSQL文字列は、引き続き "著者"、 "電子メール"をパラメータとして使用します。

どうすれば修正できますか?

マイログ:

Processing by AuthorSessionsController#create as HTML 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"ForXjJMiPCI6H37xqtPzGwa9XBOHx1yIaGjlZdUd6Iw+G4M5v6s/JXrFcGG5VVyuFl6Is+cr5Zp/fxJcNyS/Tw==", "username"=>"Test", "password"=>"[FILTERED]", "commit"=>"Login"} 
Author Load (0.5ms)  SELECT  "authors".* FROM "authors" WHERE "authors"."email" = 'Test' ORDER BY "authors"."id" ASC LIMIT ?  [["LIMIT", 1]] 
Rendering author_sessions/new.html.erb within layouts/application 
Rendered author_sessions/new.html.erb within layouts/application (2.4ms) 
Completed 200 OK in 63ms (Views: 49.6ms | ActiveRecord: 2.5ms) 

マイセッションコントローラ:

class AuthorSessionsController < ApplicationController 
    def new 
    end 

    def create 
    if login(params[:username], params[:password]) 
     redirect_back_or_to(articles_path, notice: 'Logged in successfully.') 
    else 
     flash.alert = 'Login failed.' 
     render action: :new 
    end 
    end 

    def destroy 
    logout 
    redirect_to(articles_path, notice: 'Logged out!') 
    end 
end 

マイnew.html.erb

<h1>Login</h1> 

<%= form_tag author_sessions_path, method: :post do %> 
<div class="field"> 
    <%= label_tag :username %> 
    <%= text_field_tag :username %> 
    <br> 
</div> 
<div class="field"> 
    <%= label_tag :password %> 
    <%= password_field_tag :password %> 
    <br> 
</div> 
<div class="actions"> 
    <%= submit_tag 'Login' %> 
</div> 
<% end %> 

<%= link_to 'Back', articles_path %> 

答えて

1

私は同じ問題が発生しましたし、次は助けました: - 移行ファイルに魔法(rails g sorcery:install)をインストールするときは、:emailを:useに変更してくださいRNAMEので、私はそうrails generate controller UserSessions new create destroyをスキップして、私の中で意見の一部

  • を移入することができます、私はあなたがすでにusers_sessionsを作っ見たユーザモデル
  • を持っていたrake db:migrateそれがこの

    class SorceryCore < ActiveRecord::Migration[5.0] 
         def change 
         create_table :users do |t| 
          t.string :username,   :null => false 
          t.string :crypted_password 
          t.string :salt 
    
          t.timestamps    :null => false 
         end 
    
         add_index :users, :username, unique: true 
         end 
        end 
    
    • ようになりますので、作成アクションでusers_sessions_controller.rbファイルlogin(params[:username], params[:password])と呼びます。これは魔法のメソッドであり、デフォルトではusername_attribute
    • としてに変更され、私は/config/initializers/sorcery.rbに行き、config.user_config do |user|行(188行目)を見つけて、user.username_attribute_names = [:username]を追加したので、電子メールの代わりにユーザー名が使用されます。

    これは私のために解決しました。 :email:usernameに変更することを忘れないでください。

  • 関連する問題