Railsチュートリアル 第8章 メモ書き
○基本的なログイン機構
・ログイン:
ブラウザがログイン状態をキープ、ユーザーがブラウザを閉じたら状態を破
棄する仕組み(認証システム:Authentification System)
+
ログイン済のユーザーだけがアクセスできるページや機能
(認可モデル:Authorization Model)
・セッション:
HTTPはリクエストが終わると以前のリクエストの情報を利用できないStatelessなプ
ロトコル。そこで、セッション(Session)という半永続的な接続をコンピュータ間に設定することで、ログイン機構を作る。
・cookies:
Railsでセッションを実装する最も一般的な方法。ユーザーのブラウザに保存される小さ
なテキストデータで、ページの移動で破棄されない。アプリケーションはcookies内の
データを使って、ログイン中のユーザーが所有するデータをデータベースから取り出せ
る。
・セッションのRESTfulな構造:
リクエスト URL ルート アクション 用途
GET /login login_path new 新しいセッションページ(ログイン)
POST /login login_path create 新しいセッションの作成(ログイン)
DELETE /login login_path destroy セッションの削除(ログアウト)
・セッションフォーム:
セッションにはSessionモデルというものがなく、引数に@userが使えない。
そのため、form_withメソッドにはリソースのスコープとそれに対応するURLを
具体的に指定する。
form_with(url: login_path, scope: :session, local: true)
・論理積を活用した記法:
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
→入力されたメールアドレスを持つユーザーがデータベースに存在し、
入力されたパスワードがそのユーザーのパスワードである場合のみ、if文実行
・セッションのflash:
セッションモデルではActive Recordのモデルを使っていないため、
エラーメッセージの代わりにフラッシュメッセージを用意する。
・sessionメソッド:
session[:user_id] = user.id
はユーザーのブラウザ内の一時cookiesに暗号化済のユーザーIDを
自動で生成するコード
・||=記法:
@current_user ||= User.find_by(id: session[:user_id])
@current_userに値が代入されていれば@current_userを、なければfind _byを呼び出す
・fixture:
テストに必要なデータのこと。fixitureファイルに記述する。
・ログインorログアウトしているかについては、ページ内で表示する
リンクを切り替える(上の論理積のif文をビューに書くなど)ことで表す。