【发布时间】:2016-12-28 01:25:29
【问题描述】:
我无法理解以下情况:
我正在登录并通过执行以下操作记住我的用户
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
如果我将它用作例如 Sessionhelper 内部函数中的参数(例如 user.authenticated?(cookies[:remember_token]) ),为什么它在这里返回 nil 以及为什么不这样做p>
P.S.:以上所有代码均来自 Michael Hartl https://www.railstutorial.org/book 的 Ruby on Rails 教程(第 9.3.1 章)
【问题讨论】:
标签: ruby-on-rails