我使用node.js和express.js與express-jwt模塊,並且我已經設置了一個簡單的HTTP服務器來測試所有內容:Node.js - Express.js JWT總是返回瀏覽器響應中的無效令牌錯誤
這是所涉及的節點代碼:
app.set('port', process.env.PORT || 3000);
app.use(express.methodOverride());
app.use(allow_cross_domain);
app.use('/api', expressJwt({secret: '09qrjjwef923jnrge$5ndjwk'}));
app.use(express.json());
app.use(express.urlencoded());
app.use('/', express.static(__dirname + '/'));
app.use(function(err, req, res, next){
if (err.constructor.name === 'UnauthorizedError') {
res.send(401, 'Unauthorized');
}
});
app.get('login',function(req,res){
//...
jwt.sign(results.username+results.email, secret, { expiresInMinutes: 9000000000*9393939393393939393939 });
});
app.post('api/profile',function(req,res){
console.log(req.user); // this return undefined in console
res.send(req.user); // response is pending and dunno why it returns error in browser console
});
所以一旦我打開/login
網址我得到登錄,我發送會話令牌api/post
,這在瀏覽器控制檯返回此響應錯誤:
{"error":{"message":"invalid signature","code":"invalid_token","status":401,"inner":{}}}
我不明白爲什麼會發生這種情況,因爲存儲在前端的令牌和JWT中的令牌是相同的。可能是這個錯誤的原因是什麼?
頭的一個例子POST
版的api/post
網址:
可以顯示「祕密」的jwt.sign價值?另外,results.username + results.email是一個JSON? jwt.sign接受一個json對象。 – woloski
@woloski感謝回覆我的人,我沒有在sign()中爲secret var設置一個值,因爲我認爲使用** app.use('/ api',expressJwt({secret:'09qrjjwef923jnrge $ 5ndjwk'}) ); **已經設置:P我錯了? – sbaaaang
@woloski用戶不是JSON實際上我需要將它設置爲JSON是的我會嘗試它!謝謝 – sbaaaang