2016-07-12 26 views
0

Ich benutze machinepack-jwt für meinen Login und registriere mich in meinem Projekt. Es erstellt erfolgreich das Token und alles wird gut für den Ablaufteil akzeptiert. Ich weiß nicht, wie man fängt, wenn der Token abgelaufen ist oder nicht. Obwohl ich die Ablaufzeit angegeben habe, läuft sie nicht ab. Im Folgenden finden Sie für die Anmeldung mein Back-End-Code istWie finde ich heraus, ob der Token abgelaufen ist oder nicht? In machinepack-jwt

var JWT = require('machinepack-jwt'), 
    Passwords = require('machinepack-passwords'), 
    GoogleAPIsOAuth2v2 = require('machinepack-googleapisoauth2v2'), 
    Facebook = require('machinepack-facebook'), 
    request = require('request'); 
    module.exports = { 
    authenticate : function(req, res) { 
    console.log("login"); 
      User.findOne({ 
      email: req.body.email 
      }, function foundUser(err, user) { 
      if (err) return res.negotiate(err); 
      if (!user) return res.notFound(); 
    Passwords.checkPassword({ 
     passwordAttempt: req.body.password, 
     encryptedPassword: user.password 
    }).exec({ 
     error: function (err){ 
     console.log(err); 
     return res.negotiate(err); 
     }, 
     incorrect: function(){ 
     return res.notFound(); 
     }, 
     success: function(){ 
     JWT.encode({ 
      secret: '17ca644f4f3be572ec33711a40a5b8b4', 
      payload: { 
      id : user.id, 
      email: user.email 
      }, 
      algorithm: 'HS256', 
      expires: 1 
     }).exec({ 
      error: function (err){ 
      return err; 
      }, 
      success: function (result){ 
      JWT.decode({ 
       secret: '17ca644f4f3be572ec33711a40a5b8b4', 
       token : result, 
       payload: { 
       id : user.id, 
       email: user.email 
       }, 
       algorithm: 'HS256', 
       expires: 1 
      }).exec({ 
       error: function (err) { 
        res.send(err); 
       }, 
       success: function(decodedToken){ 
       console.log(decodedToken); 
       console.log(result); 
       res.send({decodedToken,token : result, expires_in:1}); 
       } 
      }) 
      } 
     }); 
     } 
    }); 
    }); 
    } 
} 

unterhalb der Frontend-Code,

angular.module('app') 
    .factory('Auth', function($http, LocalService, AccessLevels ,$auth) { 
    return { 
     authorize: function(access) { 
     if (access === AccessLevels.user) { 
      return this.isAuthenticated(); 
     } else { 
      return true; 
     } 
     }, 
     isAuthenticated: function() { 
     return $auth.isAuthenticated(); 
     }, 
     login: function(credentials) { 
     var login = $http.post('/auth/authenticate', credentials); 
     login.success(function(result) { 
     console.log(result); 
      LocalService.set('satellizer_token', result.token); 
      LocalService.set('user', result.user); 
     }); 
     return login; 
     }, 
     logout: function() { 

     LocalService.unset('satellizer_token'); 
     } 
    } 
    }) 

ich, wenn das Token abgelaufen fangen wollen und wenn Sie möchten, abgelaufen zur Login-Seite umleiten. Wie erfasse ich, ob das Token abgelaufen ist oder nicht?

Antwort

1

Sie brauchen nur die ‚exp‘ Feld (Ablaufzeit) des entschlüsselten Token mit dem aktuellen Datum

function isExpired(exp){ 
    if (exp){ 
     return exp <= Date.now()/1000; 
    } else { 
     return true; //True if the token has not the expiration time field 
    } 
} 

Beachten Sie, dass in Ihrem Beispiel überprüfen Sie die Token mit einem schlechten Wert schaffen. Es muss die Anzahl der Sekunden ab 1970-01-01T00: 00: 00Z UT sein. Siehe RFC Zum Beispiel sollte eine Verfallszeit von 1 Minute

seine
exp = Date.now()/1000 + 60 
+0

Wo soll das kommen? im Backend? – shamila

+0

Abhängig von Ihren Bedürfnissen, aber normalerweise wird die JWT Validierung im Backend durchgeführt – pedrofb

+0

Hi @ShamilaSallay, haben Sie endlich eine Lösung gefunden? – pedrofb

0

I geruhsame Serviceseite Validierung hier bin setzen.

@JsonIgnoreProperties (ignoreUnknown = true) Schnittstelle Jwt {

 Instant getExp(); 

     String getAud(); 

     String getIss(); 

} 

Decode wie diese

Jwt jwt = null; 

     try { 

      jwt = objectReader.readValue(payload); 

     } catch (IOException e) { 

      throw new AuthenticationException(e); 

     } 

     // assert not expired 
     if (jwt.getExp().isBefore(Instant.now())) { 
      throw new AuthenticationException("auth token expired"); 
     } 
+0

Das ist Java. Die Frage ist über node.js und eckig. Grundsätzlich Javascript – pedrofb

+0

Diese Art der Validierung sollte Teil der Dienste sein. Also, ich habe eine beruhigende Service-Seite Validierung gegeben. – Gangadhar