我正在嘗試實施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
是客戶端發送了'Authorization'?郵政假定您的REST客戶端或瀏覽器正在請求正確。 –
你可以發佈你的代碼如何傳遞'jwt-token'到服務器嗎? – Ofisora
使用郵遞員測試,添加請求詳細信息。我覺得Strategy有一些問題,因爲它沒有記錄任何東西,但不確定。 –