使用Rails 4.2并安装以下gem。
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页面,我会发送回我的根页面,并显示一条通知消息&#34;您已经登录&#34 ;.我对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
答案 0 :(得分:1)
也许尝试删除整个会话而不仅仅是auth_token。我在上面使用相同的Devise设置,但devise_ldap_authenticator除外。 Rails 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