2014-05-13 22 views
5

Właśnie wdrożyliśmy uwierzytelnianie tokena json internetowej, na moim backend wyślę tokena, który jest tworzony przez jsonwebtoken do klienta w następujący sposób:Json web tokenu nie wygasa

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

i po stronie klienta po prostu zapisz ten token w SessionStorage. Chodzi o to, że token nie wygasa po minucie, czy ja czegoś brakuje?

EDYTOWANIE: Zaimplementowałem to samo, co jest pokazane w poście this.

Odpowiedz

3

Token nie zostanie automatycznie usunięty z pamięci sesji przez . Jeśli jednak spróbujesz sprawdzić, czy token jest ważny, wygasły token powinien być nieprawidłowy.

Od this tutorial, sprawdzenie ważności powinien wyjątek:

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

    // handle token here 

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

Sprawdź również dołączony do pakietu jsonwebtoken. A to z docs:

(synchroniczny z zwrotnego) Zwraca ładowność dekodowany jeżeli podpis (i ewentualnie ważności, publiczność, Emitent) są ważne. Jeśli nie, , zwróci błąd.

+1

Hej Davin, dziękuję za odpowiedź. Problem był w ich kodzie źródłowym, ponieważ widzisz, że czas jest pomnożony przez 1000 wcześniej i naprawili go 10 dni temu https://github.com/auth0/node-jsonwebtoken/commit/44ed992ee58a90db3fc4a05d08cdf8356ba515c1 – anvarik

19

Wystąpił ten sam problem, gdy nie dostarczałem obiektu jako pierwszego argumentu do jwt.sign, np. jwt.sign('testuser', secret.secretToken, { expiresIn: '1h' });.

To nieprawidłowe użycie funkcji jwt.sign działa, nawet jeśli jest błędne, po prostu ignoruje podane ustawienia. https://github.com/auth0/node-jsonwebtoken/issues/64

Pamiętaj, aby zapewnić obiekt jako pierwszy argument, jak jwt.sign({user: 'testuser'}, secret.secretToken, { expiresIn: '1h' });

UPDATE: Nie zostały zgłoszone problemy z wykorzystaniem standardu non javascript obiekty, takie jak od mangusty. Wersja 5.5.2 ma na to poprawkę. Więcej szczegółów here. Dzięki @gugol za powiadomienie. Upewnij się, że przekazałeś zwykły obiekt z właściwościami, których potrzebujesz, a nie bezpośrednim obiektem bazy danych lub podobnym.

+0

Wow. To doprowadzało mnie do szału. Dzięki Marius. –

+2

Przekazuję obiekt, a mimo to token nie wygasa. Używam 'expiresIn: 60' ponieważ" expiresInMinutes "jest obecnie przestarzałe. – gugol

+0

@ gugol Powinieneś otworzyć nowy numer na github lub stworzyć nowe pytanie tutaj, z pełnym przykładem użycia. –