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“
答案 0 :(得分:0)
只要改变条件就可以了:
if basic_auth && basic_auth.valid_password?(password)
这样做是因为在检查有效密码之前,您必须检查用户是否存在给定的电子邮件ID。否则,basic_auth对象将为nil,而nil对象上的valid_password方法将抛出错误。