Файл cookie не передается после перенаправления в реализации OAuth2 (работает в Chrome, не работает в других браузерах)Javascript

Форум по Javascript
Ответить
Anonymous
 Файл cookie не передается после перенаправления в реализации OAuth2 (работает в Chrome, не работает в других браузерах)

Сообщение Anonymous »

У меня есть приложение, сервер Express которого размещен на Render, а интерфейс React — на Vercel. Я реализую OAuth2 с Google и устанавливаю токен доступа в файл cookie oauth_token после успешной аутентификации. После этого я перенаправляю пользователя во внешний интерфейс с помощью res.redirect().
Что работает:
  • Файл cookie установлен и передается правильно при тестировании в Chrome.
Проблема:
  • В других браузерах файл cookie настроен правильно из /callback конечная точка, но при перенаправлении на внешний интерфейс (маршрут /dashboard) последующие запросы не содержат файл cookie.
  • При отправке запроса типа /random на серверную часть файл cookie устанавливается правильно, но по какой-то причине res.redirect() предотвращает передачу файла cookie во внешний интерфейс.
Ответ обратного вызова с набором файлов cookie:
Изображение

Нет файлов cookie при перенаправлении на /dashboard:

Изображение

Файлы cookie устанавливаются при посещении /xyz на серверной стороне:
Изображение


Вот мой код:
Внутри /user/oauth/callback:

Код: Выделить всё

res.cookie("oauth_token", accessToken, {
maxAge: 0.95 * 60 * 60 * 1000,
httpOnly: true,
sameSite: "none",
secure: true,
});

res.redirect(`${env.FRONTEND_URL}/dashboard`);
Внутри index.ts:

Код: Выделить всё

app.use(
cors({
origin: env.FRONTEND_URL,
credentials: true,
methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
allowedHeaders: ["Content-Type", "Authorization"],
})
);

app.use(cookieParser());
Что я пробовал:
1. Перенаправление с использованием JavaScript
Посмотрел https://github.com/expressjs/express/issues/4416

Код: Выделить всё

res.cookie("oauth_token", accessToken, {
maxAge: 0.95 * 60 * 60 * 1000,
httpOnly: true,
sameSite: "none",
secure: true,
});

res.send(`


Redirecting...
window.location.replace("${env.FRONTEND_URL}/dashboard");

`);
2. Добавление параметра домена в файл cookie:

Код: Выделить всё

res.cookie("oauth_token", accessToken, {
maxAge: 0.95 * 60 * 60 * 1000,
httpOnly: true,
sameSite: "none",
secure: true,
domain: "frontend.com",
});
3. Добавление тега expires после просмотра раздела «Отправить заголовок set-cookie на URL-адрес перенаправления в node.js».

Код: Выделить всё

expires: new Date(Date.now() + 24 * 60 * 60 * 1000)
В той же теме также был комментарий, в котором говорилось, что в Express версии 4.16.3 вы должны вызывать res.cookie() перед res.redirect(), который у меня уже есть в моем коде.>

Подробнее здесь: https://stackoverflow.com/questions/798 ... -in-chrome
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»