我使用after_sign_in_path_for
方法在用户登录时实例化用户的会话变量。但是,当用户通过“记住我”功能登录时绕过该方法。当用户的会话在这里启动时,是否有另一个函数被调用?我如何确保用户会话的设置与sign_in相同,就像“记住我”自动登录一样?“记住我”在启动用户会话时不会调用after_sign_in_path_for
1
A
回答
0
我不认为有什么比较直接的。我认为至少有几个选择。
你可以在你的ApplicationController
,检查一个before_filter
如果有在,如果是签约用户,无论你做了什么你想要做建立自己的会议,是这样的:
before_filter :set_up_session_if_needed
protected
def set_up_session_if_needed
if user_signed_in? && !session[:is_set_up]
# set up session variables here, followed by:
session[:is_set_up] = true
end
end
用户登录后的第一个请求(通过“真实”登录或可记住)会导致您的会话变量被设置,然后:is_set_up
标志将被存储在会话中,因此不会再次完成在随后的请求。请注意,set_up_session_if_needed
应该是在您的after_sign_in_path_for
期间调用的方法,以便您可以DRY并且:is_set_up
会话变量得到正确处理。
另一件需要考虑的事情是,如果您希望在此时发生其他任何事情 - 例如,您是否使用:trackable
,并且您是否希望更新这些字段中的任何一个?在这种情况下,您可以添加一个sign_in(user, :force => true)
,但您希望确保不是,他们实际上只是登录而不是被记住,否则您的登录数将是错误的。如果您不需要担心这一点,则根据登录与可记住的情况,您不需要稍微不同的处理,因此您可以根本不打电话set_up_session_if_needed
,因为上面的代码将被称为before_filter on无论你在哪里重定向。
这种一般方法感觉有点恶心,但应该做我认为的工作。否则,您可能需要尝试覆盖Devise :: Strategies :: Rememberable策略的部分设计,该策略试图通过给定可记忆的cookie来检索用户(这可能比较棘手 - 我没有尝试过),或者替换策略如果这甚至是可能的。有可能甚至更坏的可能性,但我不会试图描述它们。 before_filter可能是最简单的方法!
相关问题
- 1. Debian重启后会记住PHP会话
- 2. 使用www时会话不会启动
- 3. 在会话间记住我的功能
- 4. 在symfony2中记住我和会话
- 5. 在会话超时后记住页面
- 6. 会话不会长时间粘住
- 7. 记住我与会话登录
- 8. PHP会话记住我功能
- 9. PHP会话,COOKIES和记住我功能
- 10. 记住会话 - 亚历克
- 11. 设计记住和会话
- 12. Android Facebook SDK记住会话
- 13. php记住一个会话
- 14. SQLPLUS会话记住历史
- 15. 春季“记住我”不能使用码头和会话复制
- 16. 在会话开始时启动用户作用域类
- 17. 无法启动用户的会话
- 18. 如何在用户登录时启动会话并在用户注销时结束会话
- 19. MVC 5认证的用户,没有 “记住我”(ExpireTimeSpan/machineKey中/会话超时)
- 20. Flex移动记忆用户会话
- 21. 记住几个星期的用户会话?
- 22. Google Omniauth - 完成会话后记住用户授权
- 23. “记住我”与会话ID返回给客户端
- 24. XMPP(XMPPHP)会话将不会启动
- 25. PHP和Jquery Ajax不会启动会话
- 26. 春季会议记住我
- 27. Django启用匿名用户会话
- 28. 会话超时 - 如何正确记住我?
- 29. 会话超时杀死“记住我”的cookie的ASPNET数据库
- 30. 如何记住我cookie的会话生活时间?
应该工作的叶子,我从来没有这样做过。很简单。谢谢 – Martyn