紙一重の積み重ね

35歳のエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。

【8章】Ruby on Railsチュートリアル演習まとめ&解答例【8.3 ログアウト】

はじめに

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つのステップを実行してみて、うまく動いているかどうか確認してみましょう。

ログイン状態画面を表示する。

image

Cookiesにも値が入っていることを確認。

image

Log outリンクをクリックすると、トップページに遷移することを確認。 ログアウトリンク、ユーザプロフィールリンクが表示されていないことを確認。

image

演習2

cookiesの内容を調べてみて、ログアウト後にはsessionが正常に削除されていることを確認してみましょう。

sessionの値が変わっていることを確認。

image

おわりに

ついに8章が終わりました。 だんだん難しくなってきましたが、なんとか終了することができました。 かなり現場の開発に近い実践的な内容で、非常に楽しいです。 大変ですが楽しみながら、紙一重の努力を積み重ねていきます。