はじめに
Ruby on Rails チュートリアル実例を使ってRailsを学ぼう 第4版の 8章 8.3 ログアウトの演習まとめ&解答例です。
個人の解答例なので、誤りがあればご指摘ください。
8.3 ログアウト
本章での学び
セッションの破棄
セッションの破棄は、destroy
アクションで行う。
セッションの破棄
セッションからユーザIDを削除するために、delete
メソッドを使用する。
(DELETEリクエストを発行する)
結果、ユーザIDはnilになる。
session.delete(:user_id)
log_outメソッドの実装
Sessionヘルパーにlog_outメソッドを実装する。
def log_out session.delete(:user_id) @current_user = nil end
log_outメソッドの呼び出し
Sessionsコントローラのdestroy
アクション内で、log_outメソッドを呼び出す。
ログアウト後は、トップページへリダイレクトさせる。
def destroy log_out redirect_url root_url end
ログアウト機能のテスト
0.ログイン中であることを確認する
assert is_logged_in?
1.ログアウトパスへDELETEリクエストを送信する
delete logout_path
2.ログイン中ではないことを確認する
assert_not is_logged_in?
3.リダイレクト先がトップページであることを確認する
assert_redirected_to root_rul
4.リダイレクトする
follow_redirect!
5.ログインリンクが表示されていることを確認する
assert_select "a[href=?]", login_path
6.ログアウトリンクが表示されていないことを確認する
assert_select "a[href=?]", logout_path, count: 0
7.ユーザープロフィールリンクが表示されていないことを確認する
assert_select "a[href=?]", user_path(@user), count:0
演習1
ブラウザから [Log out] リンクをクリックし、どんな変化が起こるか確認してみましょう。また、リスト 8.31で定義した3つのステップを実行してみて、うまく動いているかどうか確認してみましょう。
ログイン状態画面を表示する。
Cookiesにも値が入っていることを確認。
Log out
リンクをクリックすると、トップページに遷移することを確認。
ログアウトリンク、ユーザプロフィールリンクが表示されていないことを確認。
演習2
cookiesの内容を調べてみて、ログアウト後にはsessionが正常に削除されていることを確認してみましょう。
sessionの値が変わっていることを確認。
おわりに
ついに8章が終わりました。 だんだん難しくなってきましたが、なんとか終了することができました。 かなり現場の開発に近い実践的な内容で、非常に楽しいです。 大変ですが楽しみながら、紙一重の努力を積み重ねていきます。