2016-11-21 70 views
0

使用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

回答

1

也許嘗試刪除整個會話而不只是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

相關問題