ユーザー登録/ログアウト/ログイン動作確認(1)
ここまでの実装で、トップページにアクセスするとログイン画面にリダイレクトし、ログイン画面にあるリンクからユーザー登録画面に遷移して、ユーザー登録を行うとトップページにアクセスする一連の動作を確認できます。動作確認のため、pumaサーバーを起動します。
bin/rails s
pumaサーバー起動後、「 http://localhost:3000 」にアクセスすると以下のようなログイン画面が表示されます。
ユーザーを作成するため、[Sign up]リンクをクリックすると以下のようなユーザー登録画面に遷移します。
なお、Emailとパスワードを不正な値で登録するとバリデーションエラーが発生することが確認できます。これはValidatableモジュールによる機能です。
適切な情報(ここではEmailを「test@test.com」とします)を入力して[Sign up]ボタンをクリックすると、登録完了を示す[Welcome! You have signed up successfully.]というflashメッセージとともにトップページが表示されます。
このままだとログインした後、ユーザー情報が取得できているか分からないので、トップページのビューにユーザーのEmailを表示してみましょう。deviseが提供するcurrent_userメソッドを使用することで、ログイン後のユーザーの情報(Userクラスのオブジェクト)を取得することができます。なお、モデル名がMemberの場合は、current_menberメソッドとなることに注意してください。
<h1>Home#index</h1> <p>Find me in app/views/home/index.html.erb</p> <%= current_user.email %> # 追記
再度ログイン後のトップページをリロードすると入力したemailが表示されていることが確認できます。
最後に、このままではログアウトができないので、ログインしていればログアウトのリンクが表示され、ログアウトしていればユーザー登録/ログインのリンクが表示されるように、レイアウトにナビゲーションを追加します。
…(中略)…
<body>
<header>
<nav> # 追記ここから
<% if user_signed_in? %>
<%= link_to 'logout', destroy_user_session_path, method: :delete %>
<% else %>
<%= link_to 'sign up', new_user_registration_path %>
<%= link_to 'login', new_user_session_path %>
<% end %>
</nav> # 追記ここまで
</header>
…(中略)…
user_signed_in?メソッドはdeviseが提供するメソッドで、ログインしていればtrueを返します。deviseが設定するルーティングにより、各画面へのパスは以下の通りです。
| 画面 | パス | メソッド |
|---|---|---|
| ログアウト画面 | destroy_user_session_path | delete |
| ユーザー登録画面 | new_user_registration_path | get |
| ログイン画面 | new_user_session_path | get |
再度ログイン状態でトップページにアクセスすると以下のようにログアウトリンクが表示されます。
ログアウトリンクをクリックするとログアウトし、ログイン画面にリダイレクトすることを確認してください。ログイン画面で登録済みのEmail/パスワードを入力し、[Remember me]チェックボックスをONにして[Log in]ボタンをクリックします。
ログイン後、一度ブラウザを閉じて、再度「 http://localhost:3000 」にアクセスするとログイン状態が保たれたままトップページにアクセスできます。これはRememberableモジュールによる機能です。
