2014-05-13 8 views
5

ich implementiert nur eine json Web-Token-Authentifizierung, auf meinem Backend ich das Token senden, die von jsonwebtoken an den Client wie folgt erstellt:Json Web-Token läuft nicht

var token = jwt.sign(user, secret.secretToken, { expiresInMinutes: 1 }); 
return res.json({ token: token }); 

und auf der Client-Seite habe ich einfach Speichern Sie dieses Token in der SessionStorage. Die Sache ist, dass das Token nicht nach einer Minute abläuft, fehlt mir etwas?

EDIT: Ich implementiert das gleiche, was in this Post angezeigt wird.

Antwort

3

Das Token wird nicht automatisch aus dem Sitzungsspeicher gelöscht werden. Wenn Sie jedoch versuchen, zu überprüfen, ob das Token gültig ist, sollte das abgelaufene Token ungültig sein.

Von this tutorial sollte die Gültigkeitsprüfung eine Ausnahme:

if (token) { 
    try { 
    var decoded = jwt.decode(token, app.get('jwtTokenSecret')); 

    // handle token here 

    } catch (err) { 
    return next(); 
    } 
} else { 
    next(); 
} 

Stellen Sie sicher, auch im jsonwebtoken Paket enthalten ist. Und das ist aus der Dokumentation:

(Synchronous mit Rückruf) Gibt die dekodiert Nutzlast, wenn die Unterschrift (und optional Ablauf, Publikum, Emittenten) gültig ist. Wenn nicht, wird der Fehler zurückgegeben.

+1

Hey Davin, danke für die Antwort. Das Problem war in ihrem Quellcode, wie Sie sehen, wird die Zeit mit 1000 multipliziert, und sie reparierten es vor 10 Tagen https://github.com/auth0/node-jsonwebtoken/commit/44ed992ee58a90db3fc4a05d08cdf8356ba515c1 – anvarik

19

Ich fand mich das gleiche Problem, wenn nicht ein Objekt als erstes Argument zu jwt.sign, z. jwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });.

Diese falsche Verwendung von jwt.sign funktioniert, obwohl es falsch ist, ignoriert nur die bereitgestellten Einstellungen. https://github.com/auth0/node-jsonwebtoken/issues/64

Seien Sie sicher, dass ein Objekt als erstes Argument zu liefern, wie jwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });

Update: Es wird mit der Nutzung von Nicht-Standard-JavaScript-Objekten, wie zum Beispiel von Mungo berichtete Probleme wurde. Version 5.5.2 hat eine Lösung dafür. Weitere Details here. Danke @gugol für die Kündigung. Stellen Sie sicher, dass Sie ein einfaches Objekt mit den von Ihnen benötigten Eigenschaften übergeben, nicht ein direktes Datenbankobjekt oder ähnliches.

+0

Wow. Das hat mich verrückt gemacht. Danke Marius. –

+2

Ich übergebe es ein Objekt und trotzdem läuft das Token nicht ab. Ich benutze 'expiresIn: 60', weil" expiresInMinutes "jetzt veraltet ist. – gugol

+0

@gugol Sie sollten ein neues Problem auf github öffnen oder hier eine neue Frage mit Ihrem vollständigen Anwendungsbeispiel erstellen. –