2

セッションコントローラー:

class SessionsController < ApplicationController
  def new
  end

  def create
    user = User.find_by_email(params[:email])
    if user && User.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to products_path, notice: 'Logged in successfully'
    else
        flash.now.alert = "Email or password is invalid"
        render 'new'
    end
  end

  def destroy
  end
end

ユーザーモデル:

class User < ActiveRecord::Base
  has_secure_password

  attr_accessible :email, :password, :password_confirmation

  validates_uniqueness_of :email
end

ログインフォーム:

<h1>Login form</h1>

<%= form_tag sessions_path do %>

    <%= label_tag :email %><br/>
    <%= text_field_tag :email, params[:email] %><br/>

    <%= label_tag :password %><br/>
    <%= password_field_tag :password, params[:password] %><br/>

    <%= submit_tag "Login" %>
<% end %>

ログイン フォームを使用しようとすると、定義されていないことを示す NoMethodError が発生しauthenticateます。

has_secure_passwordユーザーモデルを入れることで認証メソッドが提供されていると思いましたか?私はここで間違っていますか?

どんな助けでも大歓迎です!

4

1 に答える 1

3

ユーザーオブジェクトで認証する必要があると思います。これを試してください

def create
    user = User.find_by_email(params[:email])
    if user && user.authenticate(params[:password])
        session[:user_id] = user.id
        redirect_to products_path, notice: 'Logged in successfully'
    else
        flash.now.alert = "Email or password is invalid"
        render 'new'
    end
  end
于 2013-08-23T07:03:18.437 に答える