はじめに
最近、プロジェクト管理業務が業務の大半を占めており、
プログラムを書く機会がなかなかありません。
このままだとプログラムがまったく書けない人になってしまう危機感(迫り来る35歳定年説)と、
新しいことに挑戦したいという思いから、
Ruby on Rails チュートリアル実例を使ってRailsを学ぼう 第4版を学習中です。
業務で使うのはもっぱらJavaなのですが、Rails楽しいですね。
これまでEvernoteに記録していましたが、ソースコードの貼付けに限界を感じたため、
Qiitaで自分が学習した結果をアウトプットしていきます。
個人の解答例なので、誤りがあればご指摘ください。
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章が終わりました。
だんだん難しくなってきましたが、なんとか終了することができました。
かなり現場の開発に近い実践的な内容で、非常に楽しいです。
大変ですが楽しみながら、紙一重の努力を積み重ねていきます。