ログインしないとチャットにアクセスできないようにする
次に、ログインしないとチャットにアクセスできないようにします。非ログイン状態でチャット画面にアクセスした際、ログイン画面にリダイレクトし、ログイン完了後にチャット画面に戻ってくるようにします。それを実現するため、セッション変数に戻ってくる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」にアクセスして動作確認をしてみましょう。
