Mat*_*dan 10 authentication ruby-on-rails devise warden
我正在使用Devise,并依赖于用户模型的last_sign_in_at来计算我的客户是否在X天内没有返回.但是,我最近发现last_sign_in_at仅在实际的表单登录事件发生时更新,而不是由于包含可记住的用户而自动登录时.
如果想要确保每次用户登录时更新last_sign_in_at(新的浏览器会话),无论他们是使用表单登录还是由可记忆的cookie自动登录,我将如何在设计兼容的方式?
Kit*_*tto 15
采用Matthew的解决方案,我认为代码应该如下(注意会话之前的not-operator [:logged_signin]):
before_filter :update_last_sign_in_at
protected
def update_last_sign_in_at
if user_signed_in? && !session[:logged_signin]
sign_in(current_user, :force => true)
session[:logged_signin] = true
end
end
Run Code Online (Sandbox Code Playgroud)
可跟踪的钩子来自Warden的after_set_user钩子 - 你可以做些什么来轻松解决这个问题,设置一个before_filter来调用sign_in.
这可以优化,但测试是否使用
before_filter proc{ sign_in(current_user, :force => true) }
Run Code Online (Sandbox Code Playgroud)
更新last_signed_in_at时间戳.
| 归档时间: |
|
| 查看次数: |
4763 次 |
| 最近记录: |