###ユーザーを忘れる
####forgetメソッドをUserモデルに追加する
class User < ApplicationRecord
.
.
.
# ユーザーのログイン情報を破棄する
def forget
# ユーザーがログアウトできるようにするため
update_attribute(:remember_digest, nil)
# .forgetで.rememberが取り消される
# nilに更新される
end
end
#####テスト
ERROR["test_login_with_valid_information_followed_by_logout", #<Minitest::Reporters::Suite:0x0000555ef4c714d0 @name="UsersLoginTest">, 2.2499602300001698]
test_login_with_valid_information_followed_by_logout#UsersLoginTest (2.25s)
ActionView::Template::Error: ActionView::Template::Error: undefined local variable or method ` ' for #<#<Class:0x0000555ef1c65cc8>:0x0000555ef4b69b50>
app/helpers/sessions_helper.rb:32:in `current_user'
app/helpers/sessions_helper.rb:43:in `logged_in?'
app/views/layouts/_header.html.erb:8
app/views/layouts/application.html.erb:9
test/integration/users_login_test.rb:43:in `block in <class:UsersLoginTest>'
24/24: [============================] 100% Time: 00:00:02, Time: 00:00:02
Finished in 2.53897s
24 tests, 58 assertions, 0 failures, 1 errors, 0 skips
ActionView::Template::Error: undefined local variable or method
テンプレートが表示されていない。のか?
ActionView::Template::Error:
.html.erbからhtmlを生成するときにエラーが起きたという意味
undefined local variable or method
知らない変数やメソッドが使われていますよという意味
多分知らないメソッドができて困っているという意味なのかな?
####永続セッションからログアウトする
app/helpers/sessions_helper.rb
module SessionsHelper
# 渡されたユーザーでログインする
def log_in(user)
session[:user_id] = user.id
#sessionメソッドで作成した一時cookiesは自動的に暗号化される
# ユーザーのブラウザ内の一時cookiesに暗号化済みのユーザーIDが自動で作成
end
.
.
.
# 永続的セッションを破棄する
def forget(user)
user.forget
# nilに更新する
cookies.delete(:user_id)
cookies.delete(:remember_token)
# クッキーからid,記憶トークンを削除する
end
# 現在のユーザーをログアウトする
def log_out
forget(current_user)
session.delete(:user_id)
# sessionのidを削除する
@current_user = nil
# ユーザーをnilにする
end
end
#####テスト
ubuntu:~/environment/sample_app (advanced-login) $ rails t
Running via Spring preloader in process 6763
Started with run options --seed 37792
24/24: [============================] 100% Time: 00:00:02, Time: 00:00:02
Finished in 2.95184s
24 tests, 61 assertions, 0 failures, 0 errors, 0 skips
###演習
1.ログアウトした後に、ブラウザの対応するcookiesが削除されていることを確認してみましょう。
確認