【发布时间】:2015-02-01 17:13:29
【问题描述】:
我的 Rails 4 应用程序有一个用户和管理员模型。
我已经为通过 rails_admin gem 创建的 Admin 模型实现了设计。当我尝试注销时出现问题:应用程序重定向到意外页面,并且日志显示不断发出 GET 请求,而不是 DELETE 请求。
经过研究,我确保注销链接具有如下指定的删除方法
在 devise.rb 中,注销是通过 delete 指定的 config.sign_out_via = :删除
路线如下
Mvc::Application.routes.draw do
resources :users
devise_for :admins
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
root "users#index"
end
我完全可以毫无问题地登录,但是当注销请求在浏览器中呈现到 /admins/sign_out 时,会话仍然处于活动状态,并且页面仍然显示管理仪表板。有趣的是,flash 消息显示“找不到模型 'S'”,我对日志显示的内容感到非常困惑
Started GET "/admins/sign_out" for 127.0.0.1 at 2014-12-03 23:10:50 +0000
Processing by RailsAdmin::MainController#show as HTML
Parameters: {"model_name"=>"s", "id"=>"sign_out"}
[RailsAdmin] Could not load model S, assuming model is non existing. (uninitialized constant S)
Gemfile
source 'https://rubygems.org'
gem 'rails', '4.0.3'
gem 'sqlite3'
gem 'bootstrap-sass', '~> 3.3.1'
gem 'uglifier', '>= 1.3.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 1.2'
gem 'simple_form'
gem 'bcrypt-ruby'
gem 'devise'
gem 'rails_admin'
group :assets do
gem 'sass-rails', '~> 4.0.0'
gem 'coffee-rails', '~> 4.0.0'
gem 'uglifier', '>= 1.3.0'
end
group :doc do
gem 'sdoc', require: false
end
group :development do
gem 'better_errors', '~> 2.0.0'
end
我想要实现的是,当执行注销时,管理员会话被破坏,管理员被重定向到 root_path。我注意到我目前只有应用程序和用户控制器,没有会话控制器。据我了解,设计引擎应该开箱即用地进行会话管理。有什么建议吗?
【问题讨论】:
-
:method => :delete 功能来自 jquery_ujs。你的项目中存在吗?您可能需要将 //= require jquery_ujs 添加到您的 application.js 文件中
-
RailsAdmin 正在从 Devise 劫持您的路由,然后因为它无法识别
/admins/sign_out,所以将其解释为/admins/:id,路由到 Show 方法,并尝试将模型与“sign_out”的 ID。你需要找到一种方法来解开 RailsAdmin 和 Devise 的纠缠,让路由按照你需要的方式工作。 -
感谢 Joseph,这很有道理,我会继续朝这个方向努力。
标签: ruby-on-rails ruby devise rails-admin