Rails 5 API에 Devise Token Auth을 통합합니다.Devise Token Auth - 버전이 지정된 API : 초기화되지 않은 상수 ApplicationController
Gemfile :
source 'https://rubygems.org'
...
gem 'omniauth', '~> 1.3'
gem 'devise_token_auth', '~> 0.1.38'
...
routes.rb :
require "api_constraints"
Rails.application.routes.draw do
namespace :api, defaults: { format: :json } do
scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
mount_devise_token_auth_for 'User', at: 'auth'
resources :users
end
end
end
application_controller.rb (APP/제어기/API/V1 /) : 여기서 구조는
module Api
module V1
class ApplicationController < ActionController::API
include ActionController::Serialization
include DeviseTokenAuth::Concerns::SetUserByToken
end
end
end
나는 POST하려고하면
{
"email": "[email protected]",
"password": "testuserpassword"
}
/api/auth/sign_in
에, 나는 오류 ActionController::RoutingError (uninitialized constant ApplicationController)
를 얻을.
devise_controller
은 자신의 메서드를 호출하려고 시도 할 때 ApplicationController
에 액세스 할 수없는 것으로 보입니다. 그래서 기본 컨트롤러를 설정하려 : 또한 작동하지 않았다
mount_devise_token_auth_for 'User', at: 'auth', base_controller: 'Api::V1::ApplicationController'
. (일을 제대로 더 이상 범위 때문에)
class ApplicationController < ActionController::API
include ActionController::Serialization
include DeviseTokenAuth::Concerns::SetUserByToken
end
그러나 물론 이것은 다른로드 오류가 발생합니다 :
내가 그것을 만들application_controller.rb
에
module
분리를 제거 할 수 있습니다, 문제를 해결하지하려면
LoadError (Unable to autoload constant Api::V1::ApplicationController, expected /home/ubuntu/workspace/app/controllers/api/v1/application_controller.rb to define it)
.
실제로 모든 네임 스페이스/모듈의 범위가하지 않는 것입니다 작동하는 유일한 것은 :
Rails.application.routes.draw do
mount_devise_token_auth_for 'User', at: 'auth'
namespace :api, defaults: { format: :json } do
scope module: :v1,
constraints: ApiConstraints.new(version: 1, default: true) do
resources :users
end
end
end
하지만 버전의 전체 목적을 격파한다. 내가 놓친 게 있니?
답변 해 주셔서 감사합니다. 지금 일하고있어 시험 할 수는 없지만 몇 시간 만에 끝낼 것입니다. –
이것은 트릭을 만들었지 만 이미 시도한 것처럼 느껴지지만 ... 나는 그렇지 않을 것입니다! 실제로 API에 여러 버전이있는 경우 범위 : v1, as : : v1'을 작성해야합니다. '경로 이름이 잘못되었습니다. 이미 사용하고있는'new_api_user_session '입니다. . 버전도 범위가 아닌 이름 공간이 될 수 있지만이 문제를 해결할 수는 있지만 전반적인 구조의 유연성이 떨어집니다. –