Sorceryを利用しユーザー機能を作成しています。
しかし、「ログイン」しようとすると下記のようなエラーが発生します。
NoMethodError in UserSessionsController#create
undefined method `login' for #UserSessionsController:0x00007f9b7d9a6d78 Did you mean? login_url
"login"メソッドが見つからない、というメッセージだと思います。
このエラーメッセージを解消するためにはloginメソッドを定義する必要があると思いますがどのように記述すればいいのでしょうか?
また、別の対策法があるようでしたら教えていただきたいです。
エラーが発生している部分のコード
ruby
1class UserSessionsController < ApplicationController 2 skip_before_action :require_login, only: [:new, :create] 3 def new 4 @user = User.new 5 end 6 7 def create 8 if @user = login(params[:email], params[:password]) 9 redirect_back_or_to(:users, notice: 'Login successful') 10 else 11 flash.now[:alert] = 'Login failed' 12 render action: 'new' 13 end 14 end 15 16 def destroy 17 logout 18 redirect_to(:users, notice: 'Logged out!') 19 end 20end 21
ログインフォーム
html
1<%= form_tag user_sessions_path, :method => :post do %> 2 <div class="field"> 3 <%= label_tag :email %><br /> 4 <%= text_field_tag :email %> 5 </div> 6 <div class="field"> 7 <%= label_tag :password %><br /> 8 <%= password_field_tag :password %> 9 </div> 10 <div class="actions"> 11 <%= submit_tag "Login" %> 12 </div> 13<% end %>
ユーザーモデル
ruby
1class User < ApplicationRecord 2 authenticates_with_sorcery! 3 4 validates :password, length: { minimum: 3 }, if: -> { new_record? || changes[:crypted_password] } 5 validates :password, confirmation: true, if: -> { new_record? || changes[:crypted_password] } 6 validates :password_confirmation, presence: true, if: -> { new_record? || changes[:crypted_password] } 7 8 validates :email, uniqueness: true 9end
バージョンについて
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]
Rails 5.2.1
なぜ用意されているはずの"login"メソッドが見つからないのか分からないので、原因とエラーを解決し正しくログインする方法を知りたいです。お願いします
あなたの回答
tips
プレビュー