Cookie wird nach der Umleitung in der OAuth2-Implementierung nicht übertragen (funktioniert in Chrome, schlägt in andereJavaScript

Javascript-Forum
Anonymous
 Cookie wird nach der Umleitung in der OAuth2-Implementierung nicht übertragen (funktioniert in Chrome, schlägt in andere

Post by Anonymous »

Ich habe eine Anwendung, bei der mein Express-Server auf Render und mein React-Frontend auf Vercel gehostet wird. Ich implementiere OAuth2 mit Google und setze das Zugriffstoken nach erfolgreicher Authentifizierung in das Cookie oauth_token. Anschließend leite ich den Benutzer mit res.redirect() zum Frontend um.
Was funktioniert:
  • Das Cookie wird korrekt gesetzt und übergeben, wenn es in Chrome getestet wird.
Das Problem:
  • In anderen Browsern scheint das Cookie korrekt gesetzt zu sein /callback-Endpunkt, aber bei der Weiterleitung an das Frontend (die /dashboard-Route) enthalten nachfolgende Anfragen das Cookie nicht.
  • Beim Senden einer Anfrage wie /random am Backend ist das Cookie korrekt gesetzt, aber aus irgendeinem Grund verhindert res.redirect(), dass das Cookie an das Frontend übertragen wird.
Rückrufantwort mit gesetztem Cookie:
Image

Kein Cookie bei Weiterleitung zu /dashboard:

Image

Cookie wird beim Besuch von /xyz im Backend gesetzt:
Image


Hier ist mein Code:
Innerhalb von /user/oauth/callback:

Code: Select all

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

res.redirect(`${env.FRONTEND_URL}/dashboard`);
In index.ts:

Code: Select all

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

app.use(cookieParser());
Was ich versucht habe:
1. Weiterleitung mit JavaScript
Angesehen unter https://github.com/expressjs/express/issues/4416

Code: Select all

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. Hinzufügen der Domain-Option zum Cookie:

Code: Select all

res.cookie("oauth_token", accessToken, {
maxAge: 0.95 * 60 * 60 * 1000,
httpOnly: true,
sameSite: "none",
secure: true,
domain: "frontend.com",
});
3. Hinzufügen des „expires“-Tags, nachdem Sie sich „Set-Cookie-Header an eine Weiterleitungs-URL senden“ in „node.js“ angesehen haben.

Code: Select all

expires: new Date(Date.now() + 24 * 60 * 60 * 1000)
Im selben Thread gab es auch einen Kommentar, der besagte, dass Sie in Express-Version 4.16.3 res.cookie() vor res.redirect() aufrufen müssen, was ich bereits in meinem Code habe.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post