为什么我不能使用Devise注销用户?

问题描述:

使用Rails 4.2并安装了以下gem。为什么我不能使用Devise注销用户?

gem 'turbolinks' 
gem 'jquery-ui-rails' 
gem "devise_ldap_authenticatable" 

从我可以告诉工作正常,但,当我点击我的注销链接的一切......

<%= link_to "Logout", destroy_user_session_path, method: :delete, :data => { :no_turbolink => true } %> 

它正确地将用户重定向回在生产上的登录页面,但如果我刷新sign_in页面我发送回我的根页面并显示“您已经登录”的通知消息。我对destroy_user_session_path动作包含以下内容:

# DELETE /resource/sign_out 
    def destroy 
    cookies.delete(:auth_token) 
    reset_session 
    super 
    end 

当我做我的开发环境相同的步骤,一切工作正常,但在生产,我得到我上面所述的行为。正如一些帖子所建议的那样,我也尝试过将销毁方法从:delete方法更改为:get(尽管这看起来很不正确),但这并不奏效。我还检查了我的application.html.erb中有以下行:<%= csrf_meta_tags %> - 它的确如此。终于在这里的JavaScript的我(可能过于庞大)列表包括...

//= require jquery 
//= require jquery-ui 
//= require jquery_ujs 
//= require jquery.turbolinks 
//= require jquery.tokeninput 
//= require jquery-ui/autocomplete 

// for bootstrap 4 add tether below 
//= require turbolinks 
//= require nprogress 
//= require nprogress-turbolinks 
//= require nested_form_fields 
//= require highcharts 
//= require highcharts/highcharts-more 
//= require highcharts/modules/exporting 
//= require bootstrap-sprockets 
//= require bootstrap-multiselect 
//= require_tree . 

如果我忘了什么,请让我知道,我会包括它。谢谢!

更新(新增破坏行动)

# DELETE /resource/sign_out 
    def destroy 
    cookies.delete(:auth_token) 
    reset_session 
    super 
    end 
+1

只是叫超级...让设计为你做,除非需要。 – Milind

+0

@Milind,我叫超级,对不起,我没有包括我的摧毁行动。正在更新... – daveomcd

也许尝试删除整个会话而不只是AUTH_TOKEN。我正在使用与devise_ldap_authenticator例外情况相同的Devise设置。轨道4

# app/controllers/sessions_controller.rb 
class SessionsController < ApplicationController 

    def destroy 
     session.delete(:user_id) 
    end 
end 

然后在

# To log out 
<%= link_to "Log Out", destroy_user_session_path, :method => 'delete'%> 

在我的Gemfile我使用的有效记录会话存储视图:

gem 'activerecord-session_store', github: 'rails/activerecord-session_store' 

而且在初始化

Rails.application.config.session_store :active_record_store 
+0

我认为解释是(而且我可能是错的)是,如果我为会话使用cookie_store,那么我无法销毁或使特定会话失效。您可以做的最好:cookie_store设置超时以使会话过期。所以我已经转到了一个AR会话存储,正如你在答案中所解释的那样。谢谢! – daveomcd