概要
Railsのログイン関連処理について、
Railsチュートリアルの第8章をもとに整理。
環境
ruby 3.0.2
rails 6.1.4
ログイン関連の用語
HTTP
- ステートレスなプロトコル
- ブラウザページを移動した時に、ユーザーのIDを保持しておく手段が無い
session
- 半永続的な接続
- コンピュータ間(ブラウザとサーバの間)に設定する
- HTTPプロトコルより上の階層のため、HTTPの特性とは別に接続を確保できる
- sessionメソッド:ブラウザを閉じると自動的に終了する一時セッションを作成。
cookies
- ユーザーのブラウザに保存される小さなテキストデータ
- ページ移動しても破棄されないので、ユーザーID等を保存可能
- アプリケーションは、このcookiesのデータを使用してDBから情報を取り出せる
- cookiesメソッド:ブラウザを閉じても終了しないセッションを作成。
ログイン機能の実装
RESTfulなセッション
セッションをRESTfulなリソースとしてモデリングすることで、他のUserやPostなどのリソースを実装するのと同じように扱うことが可能。
- newアクション:新しいセッション作成のためのページ(ログインページ)を表示
- createアクション:セッションを作成して保存(ログイン)
- destroyアクション:セッションを破棄(ログアウト)
その他のリソースとの違い
Usersリソース
- Userモデルを介してDB上の永続的なデータにアクセスする
Sessionリソース
- cookiesを保存場所として使う
→Modelを持つリソースの場合は、DBから情報を取ってくる。それに対し、セッションはModelを持っていないため、DBの代わりにcookiesから情報を取ってくる。
ログイン、ログアウトって結局なに?
ログイン:ブラウザ内の一時cookiesにユーザーIDを作成すること
ログアウト:ブラウザ内の一時cookiesからユーザーIDを削除すること
Railsのsessionメソッドでは、それぞれ下記の記述で実現可能。
# 例)id=1のユーザー情報をuserに格納している場合
user = User.first
# ログイン
session[:user_id] = user.id
# ログアウト
session.delete(:user_id)
アプリケーションの各ページでは、session[:user_id]
が入っているか否かに応じて、ログイン状態を判別する。
最後に
間違い等ありましたらご指摘いただけますと幸いです!