我已经成功实现了devise_token_auth
,并且正在尝试进行常规设计。对于devise_token_auth
,我有ApiController
,它是从ApplicationController
继承的。这是路线文件:
Rails.application.routes.draw do
defaults format: :json do
namespace :api do
resources :appointments, only: [:index]
end
end
scope module: :web do
root to: 'pages#home'
end
mount_devise_token_auth_for 'User', at: 'api'
end
,这是从ApiController
成功继承的控制器之一:
class Api::AppointmentsController < ApiController
before_action :authenticate_user!
def index
@appointments = Appointment.all
end
end
我正确返回了json,通知我登录:
{
"errors": [
"You need to sign in or sign up before continuing."
]
}
这是页面控制器:
class Web::PagesController < ApplicationController
before_action :authenticate_user!
def home
end
end
如果我将PagesController中的before_action :authenticate_user!
注释掉,则会找到正确的页面。但是,如果我添加before_action :authenticate_user!
,而不是重定向到http://localhost:3000/web/sign_in
,我将被定向到http://localhost:3000/api/sign_in
,它是json而不是视图。我尝试将devise_for :users, path: 'web'
添加到路由中,但是它不起作用,服务器也无法启动。它给我消息
您可能已经使用
:as
选项定义了两个具有相同名称的路由,或者您可能正在覆盖具有相同名称的资源已定义的路由。对于后者,您可以按照以下说明限制使用resources
创建的路由:
有什么想法吗?