【发布时间】:2019-10-26 02:19:53
【问题描述】:
我有一个仅 API 的 rails 应用,用于用户管理的 Devise 和用于来自移动应用的令牌授权的门卫。这很好用。
我还安装了 Rails Admin,用于管理我的数据库中的所有后端数据,它运行良好,我可以从浏览器使用 Rails Admin,移动应用程序通过 API 访问数据。
到目前为止,Rails 管理仪表板没有受到保护,我需要保护它,以便只有管理员可以修改数据库中的数据。
我通过此链接 https://github.com/plataformatec/devise/wiki/How-to-Setup-Multiple-Devise-User-Models 使用教程创建了另一个设计范围
但是当我输入 Rails Admin URL 时,页面会从设计重定向到 /admins/sign_in,我认为这是正确的行为,但随后出现以下错误:
Started GET "/" for 186.2.132.186 at 2019-06-11 15:14:40 +0000
(0.9ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
↳ /usr/local/rvm/gems/ruby-2.5.5/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
(0.9ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
↳ /usr/local/rvm/gems/ruby-2.5.5/gems/activerecord-5.2.3/lib/active_record/log_subscriber.rb:98
Processing by RailsAdmin::MainController#dashboard as HTML
Completed 401 Unauthorized in 10ms (ActiveRecord: 0.0ms)
Started GET "/admins/sign_in" for 186.2.132.186 at 2019-06-11 15:14:40 +0000
Processing by Admins::SessionsController#new as HTML
Completed 406 Not Acceptable in 16ms (ActiveRecord: 3.2ms)
ActionController::UnknownFormat (ActionController::UnknownFormat):
responders (2.4.1) lib/action_controller/respond_with.rb:213:in `respond_with'
devise (4.6.2) app/controllers/devise/sessions_controller.rb:14:in `new'
...more stack
在 Rails ADmin 初始化程序上,我添加了以下代码:
## == Devise ==
config.authenticate_with do
warden.authenticate! scope: :admin
end
config.current_user_method(&:current_admin)
这是我的路线:
#require 'api_constraints.rb'
Rails.application.routes.draw do
use_doorkeeper do
# No need to register client application
skip_controllers :applications, :authorized_applications, :admins
end
#devise_for :admins, path: 'admins'
devise_for :admins, controllers: {
sessions: "admins/sessions",
#registrations: 'admins/registrations',
}, skip: [:registrations]
mount RailsAdmin::Engine => '/', as: 'rails_admin'
#devise_for :users
# For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
scope module: :api, defaults: { format: :json }, path: 'api' do
scope module: :v1 do
devise_for :users, controllers: {
registrations: 'api/v1/users/registrations',
}, skip: [:sessions, :password]
end
end
#Rutas para acceder al API
#scope '/api' do
namespace :api do
namespace :v1 do
resources :users
resources :ejercicios
resources :medidas
resources :profiles
resources :categoria_ejercicio
end
end
root to: 'home#index'
end
我还使用此命令为管理员添加了 Devise 视图
rails g devise:views admins
你能给我一个关于如何使它工作的提示或建议吗?谢谢。
【问题讨论】:
-
可以发布您的整个
routes.rb文件,我想知道您是否为 API 使用了不同的命名空间,或者您是如何处理 API 路由的。 -
嗨@danielavila,我更新了问题并包含了完整的 routes.rb 文件。
-
@danielavila 嗨丹尼尔,我发布了整个 routes.rb 文件,你有什么可以解决问题的线索吗?感谢您的宝贵时间。
标签: ruby-on-rails api devise ruby-on-rails-5 rails-admin