身份验证 ruby valid_password 错误

authentication ruby valid_password error

我是 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

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

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

User.find_by_email(params[:email]) returns nil(找不到),因此 user 是 nil,而 Rails 告诉你 nil class 没有 valid_password? 方法。

编辑

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

编辑 v2

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

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

只需检查用户。我认为你的查询 User.find_by_email(params[:emil]) return 一个 nil 。这就是为什么你得到未定义的方法“valid_password?”对于 nil:NilClass 。

将 if 行更改为

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