0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

railsチュートリアル第九章 ユーザーを忘れる

Posted at

###ユーザーを忘れる

####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が削除されていることを確認してみましょう。

確認

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?