Rails – 掲示板 – ユーザー認証機能

概要

サインアップしたユーザーが、メールアドレスとパスワードでサインインし、サインアウトする機能を実装する。

セッションによるアクセス制限などの管理は後に実装し、ここではユーザー認証とページ遷移だけにとどめる。

掲示板の第1段階へ

サインイン機能

サインイン処理アクション

サインインが要求されたとき、sign_inアクションからサインインのビューがレンダリングされる。ビューのフォームとの間でUserモデルを介してデータをやりとりするので、アクションでUserモデルのインスタンスを生成しておく。

フォームでのモデルの設定

サインインのビュー、sign_in.html.erbform_withヘルパーで、コントローラーで生成されたUserモデルのインスタンスを指定する。

app/views/users/sign_in.html.erb

サインイン処理

サインインフォームの入力情報は、users_controllersign_in_processアクションにPOSTされる(ルーティングは「フォームの入力を確認する」で設定した)。

users_controllerに、以下のsign_in_processメソッドを追加する。

処理の流れは以下のとおり。

  1. POSTされたデータをuser_paramsメソッドにより受け取る(user_paramsについてはform_withとモデルの使い方を参照)
  2. user_paramsを使って入力データがセットされたUserインスタンスを生成
  3. ユーザー登録時と同じ方法で暗号化されたパスワード(ダイジェスト)を生成
  4. メールアドレスとパスワードダイジェストで、データベースからユーザーを検索
  5. ユーザーが存在する場合、サインインとしてtopページにリダイレクト
  6. ユーザーが存在しない場合、エラーメッセージをセットして再度サインイン画面をレンダリング(@userに入力データがセットされているので、サインイン画面にメールアドレスが残る)

サインアウト機能

サインインに成功すると、トップ画面に遷移する。

トップ画面を始めサインイン後にアクセス可能な画面は全てヘッダーメニューを持つ。そのメニュー中、サインアウトの項目をサインイン画面へのリンクとする。

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です