我正在开发一个用于用户身份验证的rails应用程序。当用户尝试注销时,我遇到了问题。所需的行为是,当用户单击注销按钮时,它们将被注销并被带到登录页面。但是,现在实际发生的是他们当前所在的页面仍然存在。他们需要点击刷新按钮或尝试导航到另一个页面,以显示登录屏幕。
我尝试覆盖应用程序控制器中的after_sign_out_path_for(resource_or_scope)方法,将其重定向到另一个页面,这将导致登录页面显示。这个电话从未被触发过。
我还在会话控制器中添加了一个after_filter,并尝试重定向到另一个页面。然而,这导致出现双重误差。
我花了很多时间在stackoverflow和interwebs试图找到解决方案,但我无法。任何帮助将不胜感激。
退出链接代码
<%= link_to('Logout', destroy_user_session_path, :method => 'get',:class=>'btn btn-sm btn-default') %>
我已经更改了设计初始化程序以支持“获取”而不是删除。
有什么想法吗?
编辑:registration_controller.rb
class RegistrationsController < Devise::RegistrationsController
layout "devise_layout"
respond_to :json
end
的routes.rb
devise_for :users, :controllers => {sessions: 'sessions', registrations: 'registrations'}
scope "/admin" do
resources :users
end
答案 0 :(得分:1)
抱歉,由于声誉,我无法发表评论。我会做什么:
话虽如此,你能告诉我们你的会话控制器吗?
答案 1 :(得分:1)
好吧,经过多次挖掘后,我发现了以下辅助方法
sign_out_and_redirect(current_user)
使用它会导致我的after_sign_out_path_for函数被触发,现在我可以使用了。
答案 2 :(得分:0)
如果您在刷新或导航到任何其他页面后重定向回登录屏幕,那么它会清楚地表明您的注销操作已经运行。
看起来你的动作像ajax调用一样触发。
尝试在'data-no-turbolink' => true
中使用link_to
。如果不是这种情况,请更新您的控制台日志。
答案 3 :(得分:0)
只需添加方法:delete
即可完成。