Я хочу иметь два разных маршрута для устройства:
- localhost: 3000 / login - стандартное устройство разработки auth
- localhost: 3000 / api / login - auth для вызовов API с использованиемдругой, не стандартный контроллер / api / session_controller
rout.rb
devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }
namespace :api, defaults: { format: :json } do
devise_for :users,
path: '',
defaults: { format: :json },
path_names: {
sign_in: 'login',
sign_out: 'logout',
},
controllers: { sessions: 'api/sessions' }
end
рельсы маршруты |grep sessio
new_user_session GET /login(.:format) devise/sessions#new
user_session POST /login(.:format) devise/sessions#create
destroy_user_session DELETE /logout(.:format) devise/sessions#destroy
new_api_user_session GET /api/login(.:format) api/sessions#new {:format=>:json}
api_user_session POST /api/login(.:format) api/sessions#create {:format=>:json}
destroy_api_user_session DELETE /api/logout(.:format) api/sessions#destroy {:format=>:json}
api / session_controller.rb
class Api::SessionsController < Devise::SessionsController
skip_before_action :verify_authenticity_token
skip_before_action :authenticate_user!
respond_to :json
private
def respond_with(resource, _opts = {})
render json: resource
end
def respond_to_on_destroy
head :no_content
end
end
Этот код выглядит хорошо для меня, но когда я пытаюсь отправить POST-запросна мой localhost: 3000 / api / login с учетными данными аутентификации возвращается ошибка:
{"error": "Вам необходимо войти или зарегистрироваться перед тем, как продолжить."}
Если я закомментирую мои заданные по умолчанию маршруты разработки и переместлю маршруты api из пространства имен api, все будет хорошо, после запроса вернусь мне json с ресурсом: rout.rb
#devise_for :users, path: '', path_names: { sign_in: 'login', sign_out: 'logout' }
devise_for :users,
path: 'api',
defaults: { format: :json },
path_names: {
sign_in: 'login',
sign_out: 'logout',
},
controllers: { sessions: 'api/sessions' }
namespace :api, defaults: { format: :json } do
...
end
Почему это случилось?Чего мне не хватает?