1

我正在按照本书第 14 章“登录”中的示例编写。我在“127.0.0.1:3000/login”中的观点运作良好,但如果我插入我的用户名和密码,它会返回此错误:

SessionsController#create 中的 NoMethodError

#< 用户:0x9f75978> 的未定义方法“身份验证”

如何解决?

创建方法 session_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
4

2 回答 2

4

它正在尝试调用authenticate用户,这意味着您可能没有用户身份验证方法。如果你这样做,请确保它不是私人的。

于 2012-05-15T19:42:37.787 回答
2

您提供的代码尝试在User 对象的实例authenticate上调用该方法。

根据您的评论:User.authenticate(name, password)您仅在 User上有一个身份验证方法- 它同时将名称和密码作为参数。

要调用 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)

于 2012-05-22T02:14:42.967 回答