Rails tutorial 第8章
基本的なログイン構造
-
ブラウザがログインしている状態を保持し、ユーザーによってブラウザが閉じられたら状態を破棄するといった仕組み (認証システム (Authentification System)
-
この認証システムの基盤が出来上がったら、ログイン済みのユーザー (current user) だけがアクセスできるページや、扱える機能などを制御していきます
-
なお、このような制限や制御の仕組みを認可モデル (Authorization Model) と呼ぶ。
-
この第8章と第9章を通して、1: ブラウザを閉じるとログインを破棄する (Session)、 2: ユーザーのログイン情報を自動で保存する (Cookie)、3: ユーザーがチェックボックスをオンにした場合のみログインを保存する (Remember me) 、という3つの一般的なログイン機構を実装することになります
1.セッション
- HTTP == statelessなプロトコル。過去を捨てた旅から旅の流れ者的なプロトコル(強者)
- よって別のページに移動したときに、ユーザーのIDを保持しておく手段が全くない
- Webアプリケーションでは、セッション (Session) と呼ばれる半永続的な接続をコンピュータ間 (ユーザーのパソコンのWebブラウザとRailsサーバーなど) に別途設定
- Railsでセッションを実装する方法として最も一般的なのは、cookiesを使う方法です
- cookiesとは、ユーザーのブラウザに保存される小さなテキストデータです。cookiesは、あるページから別のページに移動した時にも破棄されないので、ここにユーザーIDなどの情報を保存できます
- cookiesとは、ユーザーのブラウザに保存される小さなテキストデータです。cookiesは、あるページから別のページに移動した時にも破棄されないので、ここにユーザーIDなどの情報を保存できます
- UsersリソースではバックエンドでUserモデルを介してデータベース上の永続的データにアクセスするのに対し、Sessionリソースでは代わりにcookiesを保存場所として使う
Sessionsコントローラ
-
ログインのフォームは、この節で扱うnewアクションで処理します。
-
createアクションにPOSTリクエストを送信すると、実際にログインします (8.2)
-
destroyアクションにDELETEリクエストを送信すると、ログアウトします
-
Sessionリソースではフルセットはいらないので、「名前付きルーティング」だけを使います
-
GETリクエストやPOSTリクエストをloginルーティングで、DELETEリクエストをlogoutルーティングで扱います
-
rails routesコマンドを実行してみましょう。いつでも現状のルーティングを確認することができます
ログインフォーム
- セッションフォームとユーザー登録フォームの最大の違いは、セッションにはSessionモデルというものがなく、そのため@userのようなインスタンス変数に相当するものもない点です。したがって、新しいセッションフォームを作成するときには、form_forヘルパーに追加の情報を独自に渡さなければなりません。
ユーザーの検索と認証
- ログインでセッションを作成する場合に最初に行うのは、入力が無効な場合の処理