2017-02-22 4 views
0

私の検証トークン関数はtrueの代わりに未定義を返します、issuetoken関数はトークンを発行し、検証トークン関数は発行されたトークンを検証します。my関数は未定義を返しますどのように私はこれを解決することができます

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 -synchronous-call) – Frxstrem

答えて

1

jwt.verifyは非同期ですが、同期的に処理しています。

あなたはトークンが確認された時に知りたい場合は、コールバックのいくつかの並べ替えを渡すか、多分場合Promise

コールバック

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. 

約束

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 docsを見て、あなたは同期的に行うことができます。コールバックを省略する必要があります。

verifytoken = function (token, secret) { 
    try { 
    jwt.verify(token, secret) 
    return true 
    } catch(err) { 
    return false 
    }  
} 
[私は非同期呼び出しからの応答を返すにはどうしますか?](の
+0

トークンが検証されている場合はtrueを返し、そうでない場合はfalseを返します。 – linux

+0

@linux更新された回答を確認 –

+0

あなたの質問に答えた場合は、私の答えを正しいものとしてマークしてください –

関連する問題