2017-09-03 59 views
1

我正在嘗試實施JWT身份驗證。 /登錄和/註冊工作正常,他們返回身份驗證令牌,但是當我嘗試使用頭'授權'='JWT token_received'GET /祕密,它返回一個字符串'未經授權',我可以看到從JWTStrategy沒有日誌記錄。請讓我知道我出錯的地方。嘗試在節點中實施JWT身份驗證。獲得未經授權的保護路線

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); 
}); 

使用郵遞員作爲客戶端。來自郵遞員的詳細要求,

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

是客戶端發送了'Authorization'?郵政假定您的REST客戶端或瀏覽器正在請求正確。 –

+0

你可以發佈你的代碼如何傳遞'jwt-token'到服務器嗎? – Ofisora

+0

使用郵遞員測試,添加請求詳細信息。我覺得Strategy有一些問題,因爲它沒有記錄任何東西,但不確定。 –

回答

0

明白了。請求中發生錯誤。

按照該README,它應該是 '授權'= '承載token_received_on_login'

0
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken(); 

應該

ExtractJwt.fromAuthHeaderWithScheme('jwt');