身份验证ruby valid_password错误

时间:2015-06-10 10:38:18

标签: ruby-on-rails login devise passwords

我是ROR的新手。我尝试使用电子邮件和密码进行简单登录。我无法验证密码。这是一个重复的问题,我的错误还没有用旧问题清除。我的代码是

 user = User.find_by_email(params[:email])
 user.valid_password?(params[:password])

 if @user = User.find_by_email(params[:user][:email]).valid_password?(params[:user][:password])
    #render :json=> user.as_json(:status=>'success', :Message=>'Sucessfully Registered', :username=>user.username ), :status=>201
    render :json=> {userDetails: [{:status=>'Success',:Message=>'Successfully Signed in', :username=>@user.name, :useremail=>@user.email, :usermobile=>@user.mobile_no }]}, :status=>200
 else
   render :json=> {:status=>'Failure',:message=>'Invalid Credentials'}, :status=>422
   :message=>'Sucessfully Singed in', :auth_token=>user.authentication_token, :email=>user.email), :status=>201
  end

我面临以下错误

undefined method `valid_password?' for nil:NilClass

谁能告诉我我做错了什么?

3 个答案:

答案 0 :(得分:1)

将if行更改为

if (@user = User.find_by_email(params[:user][:email])) && @user.valid_password?(params[:user][:password])

答案 1 :(得分:0)

user = User.find_by_email(params[:email])

User.find_by_email(params[:email])返回nil(无法找到),因此user为零,Rails告诉您 nil 类没有一个valid_password?方法。

修改

您正在调用结果为 nil 的方法User.find_by_email(params[:email])。所以简单来说,你没有找到记录。

编辑v2

您可以使用以下代码检查用户的内容以进行调试:

if !user.nil?
  puts "#{user}"
else 
  puts "user is nil!"
end

答案 2 :(得分:0)

只需检查用户。我认为您的查询与User.find_by_email(params [:emil])  返回一个零。为什么你得到未定义的方法`valid_password?'为零:NilClass。