2017-07-05 2 views
0

J'utilise JWT pour authentifier les requêtes de l'API principale et cela provoque une erreur inattendue.Aucun jeton d'autorisation n'a été trouvé dans l'autorisation de noeud

const generateJwt = function(rows) { 
var expiry = new Date(); 
expiry.setDate(expiry.getDate() + 7); 

return jwt.sign({ 
    _id: 1, 
    email: rows.email, 
    name: rows.username, 
    exp: parseInt(expiry.getTime()/1000), 
}, "MY_SECRET"); // DO NOT KEEP YOUR SECRET IN THE CODE! 

}; J'utilise le code ci-dessus pour générer le jwt et il génère avec succès.

var jwt = require('express-jwt'); 
var auth = jwt({ 
secret: 'MY_SECRET', 
userProperty: 'payload' 
}); 

var router = express.Router(); 

router.get('/list',auth, controller.getMerchantList); 

après un utilisateur est connecté Je reviens le jeton JWT et j'envoyer le jeton lorsque le client effectue des appels à l'arrière-plan.

$http.get('/api/merchant/list',{ 
    headers: { 
    Authorization: 'Bearer '+ authentication.getToken() 
    } 
}); 

Le jeton généré: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOjEsImVtYWlsIjoia2FzaGlmcm9zaGVuN0BnbWFpbC5jb20iLCJuYW1lIjoiQXJ5YSBTdGFyayIsImV4cCI6MTQ5OTg0NjEzOSwiaWF0IjoxNDk5MjQxMzM5fQ.-CCQwiadozSOuuIk9fil4aJh8D38NwgKYP3HpvClyKw

Mais je reçois toujours un 401. Le jeton JWT est là dans le front-end. J'ai vérifié via un fichier console.log. Quelqu'un peut-il m'aider s'il vous plaît à résoudre ce problème.

+0

pouvez-vous pls. montrez-nous le jeton généré (SVP éditez votre question et ajoutez-la au lieu de répondre avec un commentaire) – jps

+0

J'ai ajouté le jeton :) merci d'avance :) –

+0

Je ne suis pas familier avec express-jwt, mais récemment il y avait un un cas similaire à la vôtre (jeton présent mais toujours 401) et il s'est avéré être un problème avec la réclamation aud (public). (-> https://stackoverflow.com/questions/44398177/message-authorization-has-been-denied-for-this-request-owin-middleware/44409993#44409993) Votre jeton n'a pas la réclamation aud. Peut-être que c'est le problème. voir aussi https://tools.ietf.org/html/rfc7519#section-4.1.3 – jps

Répondre

0
const Jwt=require('jsonwebtoken'); 

function generateToken(rows,callback){ 
    let tokenData={ _id: 1, 
    email: rows.email, 
    name: rows.username 
    } 
    return Jwt.sign(tokenData,"YOUR-SECRET-KEY",{ expiresIn: 60 * 60 },function(err,token){ 
     if(err) callback(err); 
     else callback(null,token); 
}) 
} 

Envoyer ce jeton au client. Lors de la réception du jeton dans les en-têtes du client. Vous devez vérifier ce jeton à l'aide de la méthode Jwt verify. Votre middleware auth devrait prendre le jeton des en-têtes et le vérifier.

function auth(req,res,callback){ 
    let token=req.headers.authorization; 
    Jwt.verify(token,"YOUR-SECRET-KEY",function(err,decodedData){ 
     if(err) 
      callback(err); // you can send your custom error too 
     else 
      callback(null,decodedData); 
     } 
    ) 

}