ruby-on-rails – 是否有一个Devise回调“你已经登录了.”?
发布时间:2020-12-17 03:48:53 所属栏目:百科 来源:网络整理
导读:当我在登录后重新访问/ users / sign_in时,我看到你已登录的闪存.以及我的日志中的以下内容.. Filter chain halted as :require_no_authentication rendered or redirected ..我被重定向到/.我想根据某些条件调用回调和重定向. 这与after_sign_up_path_for的
当我在登录后重新访问/ users / sign_in时,我看到你已登录的闪存.以及我的日志中的以下内容..
Filter chain halted as :require_no_authentication rendered or redirected ..我被重定向到/.我想根据某些条件调用回调和重定向. 这与after_sign_up_path_for的精神相似,不同之处在于它更像是“在登录后尝试登录”. 解决方法
现在,没有简单的方法来实现你想要的. (也许拉出请求是有序的.)
问题是when the user is already authenticated,Devise调用 当用户正常登录时也会调用此方法,因此即使您重写此方法,也无法区分刚刚登录的用户和已登录的用户. 唯一的解决方案是扩展/覆盖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 由于此控制器继承自Devise,因此当您的控制器中未定义操作时,Devise的控制器将处理该操作.所以你只需要覆盖require_no_authentication方法,即is called in a before_filter. 最后,编辑您的路线文件,以使此更改生效: # routes.rb devise_for :users,:controllers => { :sessions => 'sessions' } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |