2017-02-22 4 views
0

моя функция token возвращает значение undefined вместо true, функция issuetoken выдает токен, проверенная функция токена проверяет выданный токен.моя функция возвращает undefined, как я могу решить эту проблему

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

Возможный дубликат [Как вернуть ответ от асинхронного вызова?] (Http://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an -асинхронный вызов) – Frxstrem

ответ

1

jwt.verify является асинхронным, а вы лечите его в синхронном режиме.

Если вы хотите знать, когда маркер был проверен вам нужно передать какой-то обратный вызов или, может быть, возвращающие Promise

CallBack

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. 

Promise

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 

В случае jwt.verify уже возвращает обещание, вы можете просто вернуть его результат

EDIT

Я просмотрел документы jwt, и вы можете делать синхронно. Вы должны опустить обратный вызов.

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

Я хочу, чтобы он возвращал true, если токен проверен и возвращает false, если это не так. – linux

+0

@linux проверить обновленный ответ –

+0

Если я ответил на ваш вопрос, пожалуйста, отметьте мой ответ как правильный –

 Смежные вопросы

  • Нет связанных вопросов^_^