如何使用魔法 gem 和 rails_admin
How to use sorcery gem with rails_admin
我想使用 sorcery
gem 保护 rails_admin
页面。按照这个SO answer,方法如下:
# config/initializers/rails_admin.rb
RailsAdmin.config do |config|
config.authenticate_with do
# Use sorcery's before filter to auth users
require_login
end
end
# app/controllers/application_controller.rb
class ApplicationController
# Overwrite the method sorcery calls when it
# detects a non-authenticated request.
def not_authenticated
# Make sure that we reference the route from the main app.
redirect_to main_app.login_path
end
end
这会覆盖 sorcery 处理未登录的默认方法。覆盖在我的应用程序中确实有效,但是当我访问 rails_admin 页面时,出现以下错误:
undefined local variable or method `root_path' for #<RailsAdmin::MainController.
所以覆盖在 rails_admin 代码中不起作用。我将 rails_admin 安装在我的路由文件的底部
# config/routes.rb
...
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
我该如何解决这个问题?
这是因为 rails_admin 控制器没有继承自我的应用程序控制器。有一个设置此继承的 rails_admin 配置设置,即
#config/initializers/rails_admin.rb
RailsAdmin.config do |config|
...
config.parent_controller = 'ApplicationController'
end
我想使用 sorcery
gem 保护 rails_admin
页面。按照这个SO answer,方法如下:
# config/initializers/rails_admin.rb
RailsAdmin.config do |config|
config.authenticate_with do
# Use sorcery's before filter to auth users
require_login
end
end
# app/controllers/application_controller.rb
class ApplicationController
# Overwrite the method sorcery calls when it
# detects a non-authenticated request.
def not_authenticated
# Make sure that we reference the route from the main app.
redirect_to main_app.login_path
end
end
这会覆盖 sorcery 处理未登录的默认方法。覆盖在我的应用程序中确实有效,但是当我访问 rails_admin 页面时,出现以下错误:
undefined local variable or method `root_path' for #<RailsAdmin::MainController.
所以覆盖在 rails_admin 代码中不起作用。我将 rails_admin 安装在我的路由文件的底部
# config/routes.rb
...
mount RailsAdmin::Engine => '/admin', as: 'rails_admin'
我该如何解决这个问题?
这是因为 rails_admin 控制器没有继承自我的应用程序控制器。有一个设置此继承的 rails_admin 配置设置,即
#config/initializers/rails_admin.rb
RailsAdmin.config do |config|
...
config.parent_controller = 'ApplicationController'
end