gpt4 book ai didi

ruby-on-rails - "You are already signed in."是否有设计回调?

转载 作者:行者123 更新时间:2023-12-04 05:46:44 25 4
gpt4 key购买 nike

当我重温 /users/sign_in已经登录后,我看到了闪光 You are already signed in.以及我的日志中的以下内容..

Filter chain halted as :require_no_authentication rendered or redirected

..然后我被重定向到 / .我想根据某些条件调用回调和重定向。

这在精神上类似于 after_sign_up_path_for除了它更像是“在已经登录的情况下尝试登录后”。

最佳答案

现在,没有简单的方法来完成你想要的。 (也许拉取请求是有序的。)

问题是when the user is already authenticated , Devise 调用 after_sign_in_path_for 方法。

这个方法也是在用户正常登录的时候调用的,所以即使你重写了这个方法,也无法区分刚刚登录的用户和已经登录的用户。

唯一的解决方案是扩展/覆盖 Devise 的 SessionsController:

class SessionsController < Devise::SessionsController

private

def require_no_authentication
assert_is_devise_resource!
return unless is_navigational_format?
no_input = devise_mapping.no_input_strategies

authenticated = if no_input.present?
args = no_input.dup.push scope: resource_name
warden.authenticate?(*args)
else
warden.authenticated?(resource_name)
end

if authenticated && resource = warden.user(resource_name)
flash[:alert] = I18n.t("devise.failure.already_authenticated")
redirect_to YOUR_PATH_HERE
end
end
end

由于此 Controller 继承自 Devise 的 Controller ,因此当您的 Controller 中未定义操作时,该操作将由 Devise 的 Controller 处理。所以你只需要覆盖 require_no_authentication方法,其中 is called in a before_filter .

最后,编辑您的路由文件以使此更改生效:
# routes.rb
devise_for :users, :controllers => { :sessions => 'sessions' }

关于ruby-on-rails - "You are already signed in."是否有设计回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22371512/

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