导轨中的基本身份验证

时间:2017-11-14 07:32:37

标签: ruby-on-rails basic-authentication

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :authenticate_user!, :except => [:index]
  before_action :authenticate, :except => [:index]

  def authenticate
    authenticate_or_request_with_http_basic do |username, password|
      basic_auth=User.find_by_email(username)
      if basic_auth.valid_password?(password)
        sign_in :user, basic_auth
        render :json => {:email => current_user.email, :id => current_user.id, :message => "hai ruby"}
      else
        render plain: "Unauthorized access"
      end
    end
  end
end

我正在尝试在我的示例应用程序中实现基本授权。当我在用户数据库中提供正确的凭据值时。它给出了json响应。当用户名和密码出错时,它会抛出错误,因为“未定义的方法`valid_password?”为零:NilClass“

1 个答案:

答案 0 :(得分:0)

只要改变条件就可以了:

if basic_auth && basic_auth.valid_password?(password)

这样做是因为在检查有效密码之前,您必须检查用户是否存在给定的电子邮件ID。否则,basic_auth对象将为nil,而nil对象上的valid_password方法将抛出错误。