与 Devise 的旧会话超时

Timeout old sessions with Devise

提问人:guy 提问时间:11/15/2023 最后编辑:dbuggerguy 更新时间:11/16/2023 访问量:41

问:

我正在使用 Devise 来管理我的 Rails 应用程序的登录。我想设置最大会话长度:用户将在 10 小时后被强制再次登录。

注意,这不是超时的。Timeoutable 为非活动会话设置会话过期时间。例如,如果用户在 30 分钟内没有点击链接,它将注销他们。

我甚至希望使活动会话过期,其超时时间比我的 Timeoutable 期限更长。

Ruby-On-Rails 安全 会话 设计

评论


答:

1赞 markets 11/16/2023 #1

您将需要自定义逻辑来完成此行为,因为 Devise 不提供此功能。

例如,您可以尝试使用如下内容:https://github.com/markets/sudo_rails。使用此 Gem,您可以要求用户使用控制器中的宏再次输入密码,以执行某些明智的操作(或整个应用):sudo

class ProtectedController < ApplicationController
  sudo
end

enter image description here

实际上,您并没有销毁会话,而是要求用户再次验证密码(针对 下的所有操作)。ProtectedController

它带有 Devise 集成,您还可以定义自定义会话持续时间:

# config/initializers/sudo_rails.rb
SudoRails.setup do |config|
  config.sudo_session_duration = 10.hours
end

评论

1赞 guy 11/17/2023
谢谢。我真的想终止会话,而不是把关一个或多个操作。你已经确认它需要自定义方法和自定义代码。不是我所希望的答案,但是的,我所期望的答案。