質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

1893閲覧

rails チュートリアル 11章11.30

MASA22

総合スコア13

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

1クリップ

投稿2017/05/27 07:14

編集2017/05/27 07:18

rails チュートリアルの11章の11.30のテストがGreenになりません。
チュートリアル
以下のページを参考にしても解決できませんでした。
https://teratail.com/questions/35527
https://stackoverflow.com/questions/27671085/how-do-i-troubleshoot-this-error

sessions_helper_test.rb

ruby

1require 'test_helper' 2 3class SessionsHelperTest < ActionView::TestCase 4 5 def setup 6 @user = users(:michael) 7 remember(@user) 8 end 9 10 test "current_user returns right user when session is nil" do 11 assert_equal @user, current_user 12 assert is_logged_in? 13 end 14 15 test "current_user returns nil when remember digest is wrong" do 16 @user.update_attribute(:remember_digest, User.digest(User.new_token)) 17 assert_nil current_user 18 end 19end 20 21

エラー

Failure: SessionsHelperTest#test_current_user_returns_right_user_when_session_is_nil [/Users/masashihiraishi/ruby_study/workspace/sample_app2/test/helpers/sessions_helper_test.rb:11]: --- expected +++ actual @@ -1 +1 @@ -#<User id: 762146111, name: "Michael Example", email: "michael@example.com", created_at: "2017-05-27 06:55:31", updated_at: "2017-05-27 06:55:32", password_digest: "$2a$04$OWpd.GZ46aC24J3O3c3RV.bAsWSK1N2..EB7bDirAXh...", remember_digest: "$2a$04$Hx/bpqOtDHencDSimJONSuiDem7gunIjsvoCIX65JdL...", admin: true, activation_digest: nil, activated: true, activated_at: "2017-05-27 06:55:31"> +nil

sessins_helper.rb

ruby

1module SessionsHelper 2 # 渡されたユーザーでログインする 3 def log_in(user) 4 session[:user_id] = user.id 5 end 6 # ユーザーを永続的セッションに記憶する 7 def remember(user) 8 user.remember 9 cookies.permanent.signed[:user_id] = user.id 10 cookies.permanent[:remember_token] = user.remember_token 11 end 12 # 渡されたユーザーがログイン済みユーザーであればtrueを返す 13 def current_user?(user) 14 user == current_user 15 end 16 # 記憶トークンcookieに対応するユーザーを返す 17 def current_user 18 if (user_id = session[:user_id]) 19 @current_user ||= User.find_by(id: user_id) 20 elsif (user_id = cookies.signed[:user_id]) 21 user = User.find_by(id: user_id) 22 if user && user.authenticated?(:remember,cookies[:remember_token]) 23 log_in user 24 @current_user = user 25 end 26 end 27 end 28 # ユーザーがログインしていればtrue、その他ならfalseを返す 29 def logged_in? 30 !current_user.nil? 31 end 32 # 永続的セッションを破棄する 33 def forget(user) 34 user.forget 35 cookies.delete(:user_id) 36 cookies.delete(:remember_token) 37 end 38 # 現在のユーザーをログアウトする 39 def log_out 40 forget(current_user) 41 session.delete(:user_id) 42 @current_user = nil 43 end 44 # 記憶したURL (もしくはデフォルト値) にリダイレクト 45 def redirect_back_or(default) 46 redirect_to(session[:forwarding_url] || default) 47 session.delete(:forwarding_url) 48 end 49 # アクセスしようとしたURLを覚えておく 50 def store_location 51 session[:forwarding_url] = request.original_url if request.get? 52 end 53 54end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。

user.rb

ruby

1 def authenticated?(attribute,token) 2 digest = send("#{attribute}_digest") 3 return false if digest.nil? 4 BCrypt::Password.new(remember_digest).is_password?(remember_token) 5 end

が間違っていて、

ruby

1 def authenticated?(attribute,token) 2 digest = send("#{attribute}_digest") 3 return false if digest.nil? 4 BCrypt::Password.new(digest).is_password?(token) 5 end

が正しいコードでした。
4行目の引数を設定し間違えました。
BCrypt::Password.new(digest).is_password?(token)

何回も見ても気づかなかった。。。。。

投稿2017/05/29 01:35

MASA22

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問