0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】ログイン、ログアウトって結局なに?

Last updated at Posted at 2021-12-18

概要

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]が入っているか否かに応じて、ログイン状態を判別する。

最後に

間違い等ありましたらご指摘いただけますと幸いです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?