私はトラブル次のような状況をundestanding持っている:私は、ログインして、次のルビー[:remember_token]とクッキー[「remember_token」]
class SessionsController < ApplicationController
def create
user=User.find_by(email: params[:session][:email])
if user && user.authenticate(params[:session][:password])
log_in(user)
params[:session][:remember_me]=="1" ? remember(user) : forget(user)
redirect_to user
else
flash.now[:danger]="Invalid email/password combination"
render "new"
end
end
を行うことで、私のユーザーを覚えています
を
および
module SessionsHelper
def remember(user)
user.remember
cookies.permanent.signed[:user_id]=user.id
cookies.permanent[:remember_token]=user.remember_token
end
これらのすべてが問題なく機能します。 [:remember_token]それリターンない理由
test "login with remember_me" do
log_in_as(@user)
assert_not_nil cookies["remember_token"]
end
nilを返します。私も理解していない事は、私はクッキーを使用する必要が統合テスト[「remember_token」]で、次のような状況のクッキーであるためということですセッションヘルパーの中の関数(例えば、user.authenticated?(クッキー[:remember_token]))のパラメータとして使用すると、なぜそれはできませんか?
PS:すべての上のコードは、Michael HartlのRuby on Railsチュートリアルから来ていますhttps://www.railstutorial.org/book(チャプター9.3.1)
なぜHashWithIndifferentAccessがCookieJarクラスのクッキーを内部的に表現するのに使われていないのか?私はソースが '@cookies [name.to_s]'のところにあるのを見つけました。 – jaydel
私は多くの理由が考えられます。このクラスはかなり重く、HWIAとしても機能するネストされたハッシュを許可します。これはクッキーに共通することではありません。多分オブジェクトの割り当てのようなパフォーマンスの理由もあります。 –
ええ。私はActiveSupportのバージョンを見て、クラスが実際に何を提供しているのか考えてみると、実装はかなり複雑です。 – jaydel