gpt4 book ai didi

ruby-on-rails - 设计:如何手动设置 remember_user_token cookie?

转载 作者:行者123 更新时间:2023-12-04 00:45:15 40 4
gpt4 key购买 nike

我在 Rails 3.0.0 应用程序中使用 devise 1.1.RC0 进行用户身份验证。

由于此版本的设计存在问题,而且我们的登录过程发生在(安全)子域上,因此当用户登录时,remember_user_token cookie 未设置。这只发生在涉及子域的生产中:应用程序将在本地测试时正确设置 remember_user_token cookie。

为了解决这个问题,我调整了我的 user_sessions#create 操作以手动设置此 remember_user_token:

  def create
user = User.where("lower(email) = ?", params[:user][:email].downcase).first
if user and user.valid_password?(params[:user][:password])
sign_in(:user, user)
current_user.remember_me = true if params[:user][:remember_me]

#ensure remember_user_token is set
if Rails.env.production?
cookies.signed["remember_user_token"] = {
:value => user.class.serialize_into_cookie(user),
:expires => 3.months.from_now,
:domain => ".app_name.com",
}
end

else
flash[:error] = "Login incorrect"
render :action => 'new'
end
end

这确实在生产中设置了一个 remember_user_token cookie。从那里,如果我使用浏览器工具删除 session cookie,然后刷新页面, session cookie 会弹回并且我保持登录状态 - 我假设这是 remember_user_token cookie 负责的。

但是,如果我在登录时关闭浏览器并重新启动计算机,当我重新打开计算机并转到我的应用程序的 url 时,我将不再登录。

设置此 remember_user_token cookie 的正确方法是什么? 我错过了什么?我将不胜感激任何帮助。

这是我的 session_store 初始化器:

if Rails.env.production?
AppName::Application.config.session_store :cookie_store, :key => '_app_name_session', :domain => '.appname.com'
else
AppName::Application.config.session_store :cookie_store, :key => '_app_name_session'
end

这是我的 User 模型中的相关代码:

  devise :database_authenticatable, :registerable, 
:recoverable, :rememberable, :trackable, :validatable

最佳答案

在将用户传递给 serialize_into_cookie 之前需要重新加载用户:

  sign_in(:user, user)
current_user.remember_me!

#ensure remember_user_token is set
if Rails.env.production?
cookies.signed["remember_user_token"] = {
:value => user.class.serialize_into_cookie(user.reload),
:expires => 3.months.from_now,
:domain => ".app_name.com",
}
end

关于ruby-on-rails - 设计:如何手动设置 remember_user_token cookie?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11572858/

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