gpt4 book ai didi

ruby-on-rails - cookie 之间的 Ruby on Rails 差异[:remember_token] and cookies ["remember_token"]

转载 作者:行者123 更新时间:2023-12-01 12:26:32 24 4
gpt4 key购买 nike

我无法理解以下情况:

我正在通过执行以下操作登录并记住我的用户

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

所有这些工作正常。但我不明白的是,在集成测试中我必须使用 cookies["remember_token"] 因为在以下情况下 cookies[:remember_token] 将返回 nil
test "login with remember_me" do
log_in_as(@user)
assert_not_nil cookies["remember_token"]
end

为什么它在这里返回 nil 以及为什么它不这样做,例如,如果我将它用作 Sessionhelper 内部函数中的参数(例如 user.authenticated?(cookies[:remember_token]) )

P.S.:以上所有代码均来自 Michael Hartl 的 Ruby on Rails 教程 https://www.railstutorial.org/book (第 9.3.1 章)

最佳答案

这是因为在正常应用中 cookies方法返回 ActionDispatch::Cookies::CookieJar始终将 cookie 名称转换为字符串的对象。在集成测试中,cookies方法返回 Rack::Test::CookieJar不做这种转换的对象。因此,如果您通过符号在测试中设置 cookie,则需要通过符号访问它。如果您通过字符串设置 cookie,情况也是如此。

关于ruby-on-rails - cookie 之间的 Ruby on Rails 差异[:remember_token] and cookies ["remember_token"],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39063514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com