У меня есть 2 таблицы базы данных, а именно coreteam
и user
. Обе модели настроены с devise. На данный момент, чтобы войти в основную команду, мой API: localhost:3000/api/v1/core_teams/sign_in
со следующими данными запроса.
{
"core_team": {
"email": "[email protected]",
"password": "Password21"
}
}
И API для входа пользователей: localhost:3000//api/v1/users/sign_in
со следующими данными запроса.
{
"user": {
"email": "[email protected]",
"password": "Password20"
}
}
И ниже мой файл route.rb
Rails.application.routes.draw do
root to: 'users#index'
scope 'api/v1', defaults: { format: :json } do
devise_for :core_teams, controllers: {
sessions: 'api/v1/sessions',
passwords: 'api/v1/passwords'
}
devise_for :users, controllers: {
sessions: 'api/v1/sessions',
invitations: 'api/v1/invitations',
passwords: 'api/v1/passwords',
registrations: 'api/v1/registrations'
}
end
end
И я использую devise sessioncontroller для входа в систему. Единственная разница заключается в том, как я отображаю данные.
Мой session_controller.rb выглядит следующим образом:
module Api
module V1
class SessionsController < Devise::SessionsController
private
def respond_with(resource, _opts = {})
render json: resource
end
def respond_to_on_destroy
head :no_content
end
end
end
end
Теперь моя цель состоит в том, чтобы иметь только один вызов API для входа с использованием данных запросов того же типа. Причина наличия двух разных пользовательских таблиц заключается в том, что мое приложение является многопользовательским, а основная команда находится за пределами арендатора, а пользователи находятся внутри арендатора.
resource
, лучше всего будет установить его для администратора или пользователя. Вы можете попросить клиентский FE отправить тип вместе с идентификатором, чтобы условно установить ресурс. - person Int'l Man Of Coding Mystery   schedule 13.03.2020