#ruby-on-rails #reactjs #fetch #next.js
#ruby-on-rails #reactjs #выборка #next.js
Вопрос:
У меня есть следующий стек:
- Rails API (серверная часть)
- Next.js (интерфейс)
В моем Rails API я отслеживаю, откуда поступает запрос, например ip
, user_agent
, city
, country
, latitude
, и longitude
.
Но проблема в том, что вместо пользовательских данных отправляются данные сервера.
В моем Next.js приложение, которое я использую https://nextjs.org/docs/api-routes/introduction , поскольку access_token
для API хранится в сеансе. И я не хочу предоставлять его клиенту.
Таким образом, процесс будет заключаться в том, что из React я отправлю запрос POST /api/process/
в Next.js Конечная точка API. Затем /api/process
я возьму access_token
из сеанса и отправлю запрос в Rails API.
Поскольку Next.js Конечная точка API — это та, которая отправила запрос в Rails API. Мой Rails API хранит местоположение интерфейсного сервера вместо фактической информации о пользователе.
Псевдокод:
В интерфейсе React:
fetch('/api/process', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ some: 'data' })
})
В pages/api/process.js
:
export default function handler(req, res) {
fetch(RAILS_API_ENDPOINT, {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
Authorization: `Bearer ${req.session.token}` // attach token here
},
body: req.body
})
}
Есть ли какой-либо обходной путь для этого? Кажется, я не хочу предоставлять access_token
доступ к клиенту и отправлять запрос напрямую в Rails API.
Ответ №1:
Вы настроили прокси-API, в результате сервер Rails ничего не знает о клиенте FE, потому что между ними есть промежуточный уровень. Итак, есть 2 варианта:
- Настройте клиент FE для прямого вызова rails (что, как вы сказали, вы не хотите делать).
- Отправьте эту информацию о клиенте FE как часть заголовков или в полезной нагрузке в rails API. Оттуда Rails API может делать с этими данными все, что захочет.