【问题标题】:authentication ruby valid_password error身份验证红宝石有效密码错误
【发布时间】:2015-06-10 10:38:18
【问题描述】:

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

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

【问题讨论】:

  • 您能否将params 的值添加到您的问题中。您可以在日志或服务器输出中看到这一点。

标签: ruby-on-rails login devise passwords


【解决方案1】:

将 if 行改为

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

【讨论】:

  • 同上
【解决方案2】:

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

【讨论】:

    【解决方案3】:
    user = User.find_by_email(params[:email])
    

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

    编辑

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

    编辑 v2

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

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

    【讨论】:

    • 尝试检查我的编辑。简而言之,您必须检查 User.find_by_email(params[:email]) 的结果是否为零。所以你没有找到任何用户。所以用户的价值为零。你正在尝试调用一个 nil 值的方法。
    猜你喜欢
    • 2015-06-01
    • 2012-09-12
    • 2011-04-15
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多