为什么我不能使用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
也许尝试删除整个会话而不只是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
我认为解释是(而且我可能是错的)是,如果我为会话使用cookie_store,那么我无法销毁或使特定会话失效。您可以做的最好:cookie_store设置超时以使会话过期。所以我已经转到了一个AR会话存储,正如你在答案中所解释的那样。谢谢! – daveomcd
只是叫超级...让设计为你做,除非需要。 – Milind
@Milind,我叫超级,对不起,我没有包括我的摧毁行动。正在更新... – daveomcd