gpt4 book ai didi

ruby - 我可以在使用 Devise 成功登录后执行自定义操作吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:29:54 29 4
gpt4 key购买 nike

我有一个具有基本 Devise 身份验证的应用程序。登录后,我想查找用户帐户(用户 belongs_to 帐户,帐户 has_many 用户),并将其存储在 session 中,以便它像 @current_user 一样可用。

rails 将 session 存储成这样的方式是什么?是否有一个钩子(Hook)可以与 Devise 一起使用,以便在成功登录后执行代码?

最佳答案

实际上,在 Devise 中组合使用 Omniauth 和数据库登录模块的情况下,接受的答案无法正常工作。

在 Devise 中每次成功登录操作后执行的 native Hook (忽略用户身份验证 channel )是 warden.set_user(由 devise sign_in 帮助程序调用:http://www.rubydoc.info/github/plataformatec/devise/Devise/Controllers/SignInOut#sign_in-instance_method)。

为了在用户成功登录后执行自定义操作(根据 Warden 文档:https://github.com/hassox/warden/wiki/Callbacks),将其放入初始化程序(例如 after_sign_in.rb config/initializers)

Warden::Manager.after_set_user except: :fetch do |user, auth, opts|
#your custom code
end

2015 年 4 月 30 日更新:感谢@seanlinsley 的建议(请参阅下面的评论),我已更正答案以包含 except: :fetch 以触发仅在用户通过身份验证时回调,而不是每次设置时回调。

2018 年 12 月 27 日更新 感谢@thesecretmaster 指出 Warden 现在具有内置回调,用于在after_authentication 上执行您自己的代码 https://github.com/wardencommunity/warden/wiki/Callbacks#after_authentication

关于ruby - 我可以在使用 Devise 成功登录后执行自定义操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4753730/

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