2016-10-31 8 views
0

nilである:Railsのユーザのログインは、私は私のレールのアプリを持っていると私は(私は、「テスト」というユーザーを作成している)にログインしようとしたとき、私は、コンソールでこれを見

Parameters: {"utf8"=>"✓", "authenticity_token"=>"tlKwtMBNJ4LzJuJq13bUscAGpumdr+HVmUlGlfIudT9032DMXNxqa0d2VCxCvDZRDe1D6pFfaTafSRiL6tUvhw==", "session"=>{"login"=>"", "password"=>"[FILTERED]"}, "commit"=>"Log in"} 
    User Load (1.7ms) SELECT `users`.* FROM `users` WHERE `users`.`login` IS NULL LIMIT 1 

私はセッションパラメータでいることがわかりアプリケーションはユーザーのログインを取得できません(パスワードも可能)。以下は私のユーザーとセッションコントローラである:

class UsersController < ApplicationController 
    before_action :require_admin 
    def new 
     @users = User.new 
    end 
    def create 
     @user = User.new(user_params) 
     if @user.save 
      session[:user_id] = @user.id 
      current_user = @user.id 

      redirect_to @user 
     else 
      redirect_to '/login' 
     end 
    end 
    private 
    def user_params 
     params.require(:user).permit(:first_name, :last_name, :email, :login) 
    end 
end 

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

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
     @user = User.find_by_login(params[:login]) 
     if @user && @user.authenticate(params[:password]) 
      session[:user_id] = @user.id 
      redirect_to '/' 
     else 
      flash[:error] = 'err' 
      redirect_to '/login' 
     end 
    end 

    def destroy 
     session[:user_id] = nil 
     redirect_to root_url 
    end 
end 

私はまた、ユーザーの作成をテストしていると、レコードがデータベース内にあります。 @Updateはここにあなたが(login paramはsessionキーの下にある)あなたのparamsハッシュをネストされているログインフォーム

<%= form_for(:session, url: login_path) do |f| %> 
        <div class="hidden-sm hidden-xs col-md-12 col-lg-12 "> 
         <%= f.text_field :login, :placeholder => "login" %> 
         <%= f.password_field :password, :placeholder => "password" %> 
         <%= f.submit "Log in", class: "btn-submit"%> 
        </div> 

答えて

0

ための私の見解です。

def create 
    @user = User.find_by_login(params[:session][:login]) 
    if @user && @user.authenticate(params[:session][:password]) 
    session[:user_id] = @user.id 
    redirect_to '/' 
    else 
    flash[:error] = 'err' 
    redirect_to '/login' 
    end 
end 

を試してみてください。また、あなたの例ではlogin paramが空である - 私はそれがフォームから供給されていないと思います。

@Update:formタグを使用して

<%= form_tag login_path, method: :post do %> 
    <div class="hidden-sm hidden-xs col-md-12 col-lg-12 "> 
    <%= text_field_tag :login, :placeholder => "login" %> 
    <%= password_field_tag :password, :placeholder => "password" %> 
    <%= submit_tag "Log in", class: "btn-submit"%> 
    </div> 
<% end %> 

と(paramsをもうネストされていないので)メソッドを作成するための

def create 
    @user = User.find_by_login(params[:login]) 
    if @user && @user.authenticate(params[:password]) 
    session[:user_id] = @user.id 
    redirect_to '/' 
    else 
    flash[:error] = 'err' 
    redirect_to '/login' 
    end 
end 
+0

それはまだ動作していない[OK]を - 私はセッション#でのform_for使用しています私は別の方法を試すべきですか? – andrey

+0

私のセッション/新しいビューを私の投稿に入れました – andrey

+0

これはうまくいくはずですが、私は 'form_tag'で答えを更新しました ログインフィールドにsmthを入力して' submit'を押すと、 paramsサーバは何を受け取っていますか? –

関連する問題

 関連する問題