无法设计sign_out以正常工作

时间:2016-05-06 06:41:06

标签: ruby-on-rails ruby-on-rails-4 devise

我正在开发一个用于用户身份验证的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

4 个答案:

答案 0 :(得分:1)

抱歉,由于声誉,我无法发表评论。我会做什么:

  1. 运行rake路由以查看您的获取destroy_user_session导致的控制器#动作
  2. 转到该控制器#action并在销毁用户会话后,添加redirect_to login_path或调用after_sign_out_path方法。
  3. 话虽如此,你能告诉我们你的会话控制器吗?

答案 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即可完成。