У меня есть 2 таблицы базы данных, а именно coreteam
и user
. Обе модели настроены с устройством. На данный момент для входа в основную команду мой API: localhost:3000/api/v1/core_teams/sign_in
со следующими данными запроса.
{
"core_team": {
"email": "ba+admin@gmail.com",
"password": "Password21"
}
}
И API для входа пользователей: localhost:3000//api/v1/users/sign_in
со следующими данными запроса.
{
"user": {
"email": "ba+user@gmail.com",
"password": "Password20"
}
}
И вот мой файл rout.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. тип запросов данных. Причиной использования двух разных пользовательских таблиц является то, что мое приложение является мультитенантным, а основная команда находится за пределами арендатора, а пользователи находятся внутри арендатора.
![CoreTeam and Tenant Architecture](https://i.stack.imgur.com/tJWBz.png)