ログインしないとチャットにアクセスできないようにする
次に、ログインしないとチャットにアクセスできないようにします。非ログイン状態でチャット画面にアクセスした際、ログイン画面にリダイレクトし、ログイン完了後にチャット画面に戻ってくるようにします。それを実現するため、セッション変数に戻ってくるURLを定義します。具体的にはsession[:callback]
にコールバックURLを指定します。
コントローラーの修正
まず、コントローラーをリスト7の通りに修正します。
class ChatMessagesController < ApplicationController def index unless logged_in? session[:callback] = chat_messages_index_path return redirect_to login_path end @chat_messages = ChatMessage.all end end
チャット画面にアクセスした場合に、ログイン済みかどうかをセッションヘルパーに定義したlogged_in?
メソッドを使って判断します。非ログイン時にはsession[:callback]
に、コールバックURLとなるchat_messages_index_path(/chat_messages/index)
を指定し、ログイン画面にリダイレクトします。
セッションヘルパーの修正
セッションヘルパーのlog_inメソッドをリスト8の通りに修正します。
module SessionsHelper …(中略)… def log_in(user) callback = session[:callback] reset_session session[:user_id] = user.id session[:callback] = callback end …(中略)… end
reset_session
によってセッションが初期化されるので、初期化前のタイミングで一時的にcallback
変数にコールバックURLを代入します。セッション初期化後、再度session[:callback]
にコールバックURLを代入しています。
セッションコントローラーの修正
セッションコントローラーのcreate
メソッドをリスト9の通りに修正します。
…(中略)… if user && user.authenticate(params[:session][:password]) log_in user return redirect_to session[:callback] if session[:callback].present? redirect_to user …(中略)…
ログイン後、コールバックURLが指定されていたらコールバックURLにリダイレクトして終了するようにコードを追加しています。
動作確認
これで、ログインしないとチャットにアクセスできないようにする修正が完了しました。「http://localhost:3000/chat_messages/index
」にアクセスして動作確認をしてみましょう。