在Chrome/Firefox浏览器应用程序关闭后,Devise Rememberable无法正常工作

Ran*_*ess 5 firefox google-chrome ruby-on-rails devise warden

Rails 4.2应用程序中,我已经Devise在已激活RememberableTimeoutable模块的应用程序上安装.

当用户登录,选择Remember Me和关闭浏览器选项卡时,他们在打开新选项卡并返回应用程序时会保留其登录名.这与Chrome,Firefox和Safari一致.

但是,当用户登录,选择Remember Me和关闭浏览器应用程序时,他们会在重新打开浏览器应用程序并打开新的浏览器选项卡时从应用程序中注销.这与Chrome和Firefox一致.另一方面,Safari可以按需运行.

当用户关闭Chrome和Firefox浏览器应用程序时,是否可以保留用户登录凭据?我怀疑这是一个cookie问题,但我不知道我需要更改哪些设置以保持cookie在浏览器应用程序关闭之间有效.

Windows和Mac平台之间的行为是一致的.

配置

Settings > Content settings > Cookies > Allow local data to be set = selected
Run Code Online (Sandbox Code Playgroud)

服务器

  • Rails 4.2
  • 设计3.4.1

客户1

  • Mac OSX 10.10.2(约塞米蒂)
  • Chrome 41.0.2272.101(64位)
  • Firefox 36.0.4
  • Safari 8.0.4(10600.4.10.7)

客户2

  • Windows 7的
  • Chrome 41.0.2272.101 m
  • Firefox 36.0.4

用户模型

# models/user.rb

devise :database_authenticatable, :recoverable, :rememberable, :registerable, :trackable, :validatable, :async, :timeoutable
Run Code Online (Sandbox Code Playgroud)

设计配置

# note: User model does have remember_created_at field installed

# config/initializers/devise.rb

Devise.setup do |config|
  ...
  config.remember_for = 2.weeks
  config.extend_remember_period = true
  config.rememberable_options = { secure: true }
  config.timeout_in = 2.weeks
  config.expire_auth_token_on_timeout = false
  ...
end
Run Code Online (Sandbox Code Playgroud)

小智 0

这也发生在我身上,解决方法是将expire_after手动添加到config\initializers\session_store.rb.

Rails.application.configure do
  config.session_store :cookie_store, key: '_my_app_session', expire_after: 2.years
end
Run Code Online (Sandbox Code Playgroud)

注意:替换_my_app_session为您的 cookie 名称,您可以在生产或登台中打开页面时在浏览器上检查该名称right click > inspect > application > cookies