2017-02-22 4 views
0

meine Verify-Token-Funktion gibt undefined anstelle von true zurück, die issuetoken-Funktion gibt ein Token aus, die Verify-Token-Funktion verifiziert das ausgegebene Token.meine Funktion gibt undefined zurück, wie kann ich das lösen

var jwt = require('jsonwebtoken'); //import the jwt mmodule 
var secret = process.env.JWT_SECRET || "david"; // secret question 

//issue token function 
issuetoken = function (username) { 
    var token = jwt.sign({ 
    username, 
    exp: Math.floor(Date.now()/1000) + (60 * 60), 
    }, secret); 

    return token; 
} 

//this function verifies the token, it return true if verification is succesfull and return false if not successfull    
verifytoken = function (token, secret) { 
    jwt.verify(token, secret, function (err, vt) {  
    if (err) { 
     console.log(err); 
     return false; 
    }  
    else { 
     return true;  
    } 
    }); 
} 

var token = issuetoken("david");// issue the token with username david 
var a = verifytoken(token, secret); //verification of token 
console.log(a); //it returns undefined instead of true 
+0

Mögliches Duplikat [Wie kann ich die Antwort von einem asynchronen Aufruf zurückkehren?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an - asynchroner Aufruf) – Frxstrem

Antwort

1

jwt.verify ist asynchron, aber Sie behandeln es in einer synchronen Art und Weise.

Wenn Sie wissen wollen, wenn das Token verifiziert Sie irgendeine Art von Rückruf übergeben müssen oder vielleicht ein Promise

Rückruf

verifytoken = function (token, secret, callback) { 
    jwt.verify(token, secret, function (err, vt) {  
    if (err) { 
     // decide what to do with the error... 
     callback(false); 
    }  
    else { 
     callback(true);  
    } 
    }); 
} 

var token = issuetoken("david"); //"issues the token with username david" 
verifytoken(token, secret, console.log);// verifies the token and prints to the console when done. 
Rückkehr

Versprechen

verifytoken = function (token, secret) { 
    return new Promise(function(resolve, reject) { 
    jwt.verify(token, secret, function (err, vt) { 
     if (err) { 
     // decide what to do with the error... 
     reject(false); 
     }  
     else { 
     resolve(true);  
     } 
    }) 
    }) 
} 

var token = issuetoken("david"); //"issues the token with username david" 
verifytoken(token, secret) // verifies the token 
    .then(console.log)  // prints to the console when done. 
    .error(console.error) // prints errors 

Bei jwt.verify gibt bereits ein Versprechen zurück Sie können nur ihr Ergebnis

zurückgeben

EDIT

Ich habe einen Blick in JWT Docs und Sie können synchron tun. Sie müssen den Rückruf weglassen.

verifytoken = function (token, secret) { 
    try { 
    jwt.verify(token, secret) 
    return true 
    } catch(err) { 
    return false 
    }  
} 
+0

Ich möchte, dass es true zurückgibt, wenn das Token verifiziert ist, und false zurückgibt, wenn dies nicht der Fall ist. – linux

+0

@linux Überprüfen Sie die aktualisierte Antwort –

+0

Wenn ich Ihre Frage beantwortet, bitte markieren Sie meine Antwort als richtig –

Verwandte Themen