#はじめに
rails初学者のkosukeです。
railsを学習していてsession
の使い方が、あやふやになることがあるので備忘録としてまとめておきます。
#セッションとは
セッションは主にログイン機能に使用されるもので、ログイン状態を保持することができます。
セッションを保持することで、一度ログインしたらログアウトするまで登録されたユーザーとしての扱いを受けることができます。(ブラウザを閉じたりしたら、消えてしまう。)
セッションの機能がなければ、ページを移動するたびにログインをし続けなければなりません。
セッション実装する為には、ユーザーごとのブラウザに情報する必要があります。
#定義の仕方
セッションを付与するメソッドをどこかに定義しておきます。
下記コードでは、ユーザーのid
に**「user_id」**という名前のセッションを付与しています。
こうすることで、ユーザーのブラウザ内に暗号化済みのユーザーidを自動で作成し、保存します。
ユーザーidをブラウザ上に保存しておくことで、ユーザー情報を保持することができます。
#セッションを付与するメソッド
def log_in(user)
session[:user_id] = user.id
end
下記コードはログイン実装する際のアクションです。
ユーザーのパスワード認証が正しければ、ユーザーにsession
を付与するようにしています。
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in(user)
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
#セッションの削除方法
付与したsession[:user_id]の値をnil
にするもしくは削除することで、セッションを削除することができます。
#値を「nil」にする
session[:user_id] = nil
または
#値を削除する
session.delete(:user_id)
#current_userの定義の仕方
sessionを利用して、現在ログインしているユーザーを返すことができます(いる場合)。
#現在ログインしているユーザーを表す。
def current_user
if session[:user_id] #user_idというsessionを持っている場合「真」とする
User.find_by(id: session[:user_id])
end
end
###current_userメソッドの使い方
#現在ログインしているユーザーの名前を表示する
<%= current_user.name %>
#現在ログインしているユーザーの名前とユーザー情報に飛ぶリンクを表示する。
<%= link_to current_user.name, user_path(current_user) %>
#参考文献
rails tutorial 第8章 ログイン、ログアウト
https://railstutorial.jp/chapters/log_in_log_out?version=4.2