勉強履歴(と雑記)

プログラミング初心者のメモ書きです

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のモデルを使っていないため、

エラーメッセージの代わりにフラッシュメッセージを用意する。

flash:次のリクエストが来るまで表示

flash.now:次のリクエストが発生した時に消滅

 

・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文をビューに書くなど)ことで表す。