前提・実現したいこと
<前提>
「速習実践ガイド」で学習中です。現在、Chapte4のタスク管理アプリケーションを作成しています。
<実現したいこと>
ログインしていなければタスク管理を利用できないようにしたい。
タスク管理機能の書くアクションの前に処理されるフィルタでユーザーがログインしているかどうか調べ、ログインしていなければログイン画面にリダイレクトさせ、タスク管理機能を実質的に利用できなくさせたい。
loginがdefineされた理由がわからずに困っております。
・app/controllers/application_controller.rb
にbefore_action :login_requied
を追記
・app/controllers/sessions_controller.rb
にskip_before_action :login_required
を追記したところ下記のエラーに遭遇しました。
発生している問題・エラーメッセージ
ArgumentError Before process_action callback :login_required has not been defined class SessionsController < ApplicationController skip_before_action :login_required skip_before_action :method_name def new end
該当のソースコード
application_controller.rb
application_controller.rb
1class ApplicationController < ActionController::Base 2 helper_method :current_user 3 before_action :login_requied 4 private 5 6 def current_user 7 @current_user ||= User.find_by(id: session[:user_id]) if session[:user_id] 8 end 9 10 def login_requied 11 redirect_to login_path unless current_user 12 end 13end
app/controllers/sessions_controller.rb
session_controller.rb
1Class SessionsController < ApplicationController 2 skip_before_action :login_required 3 skip_before_action :method_name 4 def new 5 end 6 7 def create 8 user = User.find_by(email: session_params[:email]) 9 10 if user&.authenticate(session_params[:email]) 11 session[:user_id] = user.user_id 12 redirect_to root_path, notice: 'ログインしました。' 13 else 14 render :new 15 end 16 end 17 18 def destroy 19 reset_session 20 redirect_to root_path, notice: 'ログアウトしました。' 21 end 22 23private 24 25 def session_params 26 params.require(:session).permit(:email, :password) 27 end 28end 29
試したこと
skip_before_action :login_required
を
skip_before_action :login_required, raise: false
に変えてみてもredirectループになってしまいました。
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3 rails 2.5.3
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/01 13:21
2019/12/01 22:38