Signatur
Beschreibung
setStatus() gehört zur Federated Credential Management API (FedCM), genauer zur Login-Status-API. Ein Identitätsanbieter (IdP), etwa ein „Mit X anmelden“-Dienst, meldet damit dem Browser, ob in dessen Browser gerade ein Nutzer angemeldet ist ("logged-in") oder nicht ("logged-out"). Die Methode wird über navigator.login.setStatus() aufgerufen und muss aus der Herkunft (Origin) des IdP kommen, also aus dem Hauptdokument des IdP oder aus einem iframe derselben Herkunft.
Der Browser speichert diesen Status pro IdP und berücksichtigt ihn, wenn eine vertrauende Seite (Relying Party, RP) über navigator.credentials.get({ identity: … }) eine FedCM-Anmeldung anfordert:
"logged-out": Der Browser schickt keine Anfrage an den Accounts-Endpunkt des IdP. Die Anfrage wird stumm abgelehnt, oder es erscheint ein Dialog, der zurlogin_urldes IdP führt. So fallen unnötige Anfragen mit Cookies weg, und Tracking über Zeitmessungen wird erschwert."logged-in": Der Browser ruft die Kontenliste ab und zeigt den Kontoauswahl-Dialog an.- Ist kein Status bekannt, versucht der Browser den Abruf. Scheitert er, setzt der Browser den Status selbst auf
"logged-out".
Rufen Sie setStatus("logged-in") direkt nach einer erfolgreichen Anmeldung beim IdP auf und setStatus("logged-out") nach dem Abmelden oder wenn die Sitzung abläuft. Statt JavaScript kann der IdP den Status auch mit dem HTTP-Antwort-Header Set-Login: logged-in bzw. Set-Login: logged-out setzen. Das eignet sich besonders für serverseitige Anmeldeabläufe.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $status Pflicht | "logged-in" | "logged-out" | Der neue Anmeldestatus des IdP. "logged-in": Mindestens ein Nutzer ist angemeldet. "logged-out": Kein Nutzer ist angemeldet. |
Rückgabewert
undefined erfüllt wird, sobald der Status gespeichert ist. Es wird abgelehnt (z. B. mit SecurityError), wenn der Aufruf aus einem unzulässigen Kontext kommt, etwa aus einem ursprungsfremden iframe.Beispiele
Status nach erfolgreicher Anmeldung beim IdP setzen
// Läuft auf https://idp.example (Herkunft des Identitätsanbieters)
const loginForm = document.querySelector('#login-form');
loginForm.addEventListener('submit', async (event) => {
event.preventDefault();
const response = await fetch('/api/login', {
method: 'POST',
body: new FormData(loginForm),
credentials: 'include'
});
if (response.ok) {
// Browser mitteilen: Nutzer ist jetzt beim IdP angemeldet
if ('login' in navigator) {
await navigator.login.setStatus('logged-in');
console.log('FedCM-Status: logged-in');
}
location.href = '/konto';
}
});
Abmelden mit Funktionsprüfung
const logout = async () => {
await fetch('/api/logout', { method: 'POST', credentials: 'include' });
// Nur in Browsern mit Unterstützung der FedCM-Login-Status-API
if (navigator.login?.setStatus) {
try {
await navigator.login.setStatus('logged-out');
console.log('FedCM-Status: logged-out');
} catch (err) {
console.warn('Status konnte nicht gesetzt werden:', err.name);
}
}
};
document.querySelector('#logout').addEventListener('click', logout);
Login-Popup nach Anmeldung schließen (mit IdentityProvider.close())
// Seite hinter der login_url des IdP, vom Browser als Popup geöffnet,
// wenn der Status "logged-out" war
const finishLogin = async () => {
await navigator.login.setStatus('logged-in');
// Popup schließen – der Browser setzt dann den FedCM-Ablauf beim RP fort
IdentityProvider.close();
};
document.querySelector('#weiter').addEventListener('click', finishLogin);
Alternative: Status per HTTP-Header (Node.js/Express)
import express from 'express';
const app = express();
app.post('/api/login', (req, res) => {
// ... Anmeldedaten prüfen, Session-Cookie setzen ...
res.set('Set-Login', 'logged-in');
res.json({ ok: true });
});
app.post('/api/logout', (req, res) => {
res.set('Set-Login', 'logged-out');
res.json({ ok: true });
});
app.listen(3000);
// Wichtig · Fallstricke
- Experimentell und nur in Chromium verfügbar (Chrome/Edge ab Version 120). Firefox und Safari unterstützen die Methode nicht. Prüfen Sie deshalb immer vorher mit
navigator.login?.setStatus. - Die Methode funktioniert nur in einem sicheren Kontext (HTTPS) und nur aus der IdP-Herkunft. Aus einem ursprungsfremden iframe, z. B. einem IdP-Widget auf der Seite eines RP, schlägt der Aufruf fehl.
- Vertrauende Seiten (RPs) rufen die Methode nicht auf. Sie ist ausschließlich für den Identitätsanbieter gedacht.
- Der Status ist nur ein Hinweis an den Browser und kein Sicherheitsmechanismus. Die eigentliche Sitzungsprüfung übernimmt weiterhin der Server über den Accounts-Endpunkt.
- Vergessen Sie
"logged-out"beim Abmelden oder beim Ablauf der Sitzung, dann ruft der Browser unnötig den Accounts-Endpunkt auf. Schlägt dieser Abruf fehl, setzt der Browser den Status zwar selbst auf"logged-out", aber der Nutzer sieht unter Umständen einen Fehlerdialog. - Setzen Sie den Status bei Bedarf serverseitig zusätzlich per
Set-Login-Header. So bleibt er auch bei Anmeldungen ohne JavaScript korrekt, etwa bei Weiterleitungen.