我正在按照本书第14章“登录”中的示例进行编写。 我在“127.0.0.1:3000/login”中的视图运行良好,但如果我插入我的用户和密码,则会返回此错误:
SessionsController中的NoMethodError #create
对于#<未定义的方法`authenticate'用户:0x9f75978>
如何解决?
create方法sessions_controller.rb是:
def create
user = User.find_by_name(params[:name])
if user and user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to admin_url
else
redirect_to login_url, alert: "Invalid user/password combination"
end
end
答案 0 :(得分:4)
它试图在用户上调用authenticate
,这意味着你可能没有用户的身份验证方法。如果你这样做,请确保它不是私密的。
答案 1 :(得分:2)
您提供的代码会尝试在User对象的实例上调用authenticate
方法。
基于您评论re:User.authenticate(name, password)
,您只在用户类上拥有验证方法 - 并且它将名称和密码作为参数。
要调用User类方法,您需要使用以下内容:
user = User.find_by_name(params[:name])
if user && User.authenticate(params[:name], params[:password])
或者,查找一个名为authenticate
的实例级方法,该方法(如上面提到的@caulfield)看起来像:
def authenticate(password)
# does stuff
end
而不是User.authenticate(name,password)