2017-09-03 3 views
1

J'essaie d'implémenter l'authentification JWT./login et/register fonctionnent bien et ils renvoient le jeton d'authentification, mais quand j'essaie de GET/secret avec un entête 'Authorization' = 'JWT token_received', il retourne une chaîne 'non autorisée' et je ne vois aucune journalisation de JWTStrategy. S'il vous plaît laissez-moi savoir où je vais mal.Essayer d'implémenter l'authentification JWT dans un noeud. Obtention non autorisée dans les routes protégées

var opts = {} 
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 
opts.secretOrKey = "very_secret" 

passport.use(new JwtStrategy(opts, function(payload, next){ 
    console.log("payload received" + payload); 
    User.findById(payload.id, function(err, user){ 
     console.log("user found:" + user); 
     if(err){ 
      return next(err, false) 
     } 
     else if(user){ 
      return next(null, user) 
     } 
     else{ 
      return next(null, false) 
     } 
    }); 
    } 
)); 

app.use(passport.initialize()); 

app.post("/login", function(req, res){ 

     var email = req.body.email; 
     var password = req.body.password; 

     var user = User.findOne({"email": email}, function(err, user){ 

     if(err){ 
      res.json({"error": err}); 
      return; 
     } 
     if(!user){ 
      res.json({"message": "No user found"}); 
      return; 
     } 
     if(user.password == password){ 
      res.json(
       { 
        "message": "User found", 
        "token": jwt.sign({"id": user.id}, opts.secretOrKey) 
       } 
      ); 
     } 
     else{ 
      res.json({"message": "Password did not match"}); 
     } 
    }); 
}); 

app.post("/register", function(req, res){ 
new User({ email: req.body.email, password: req.body.password}). 
    save(function(err, user){ 
      if(err){ 
       res.json({"message": "User cannot be created"}); 
      } 
      else{ 
       res.json(
        { 
         "message": "ok", 
         "token": jwt.sign({"id": user.id}, opts.secretOrKey) 
        } 
       ); 
      } 
    }); 
}); 

app.get("/secret", passport.authenticate("jwt", {session: false}), function(req, res){ 
    console.log(req.get('Authorization')); 
    res.json(req.user); 
}); 

En utilisant postman comme client. Demande de détails du facteur,

GET /secret HTTP/1.1 
Host: localhost:3000 
Content-Type: application/x-www-form-urlencoded 
Authorization: JWT token_I_received_on_login 
Cache-Control: no-cache 
Postman-Token: 114060a3-3074-6688-6245-0b0cfe7e9f04 
+0

Est-ce que le client d'envoyer plus de 'Authorization'? La publication suppose que votre client ou votre navigateur REST le demande correctement. –

+0

Pouvez-vous envoyer votre code comment vous passez 'jwt-token' au serveur? – Ofisora

+0

Utilisation de facteur pour tester, a ajouté des détails de demande. Je pense qu'il y a un problème avec Strategy car il ne consigne rien mais je ne suis pas sûr. –

Répondre

0

Got it. Fait une erreur dans la demande.

Selon le README, il devrait être 'autorisation' = 'token_received_on_login porteur'

0
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 

devrait être

ExtractJwt.fromAuthHeaderWithScheme('jwt');