我一直在学习 JWT,但我遇到了这个问题,其中响应给出为 JsonWebTokenError。 token 生成工作正常。但是 token 的验证给了我一个错误,指出“JsonWebTokenError”,并显示消息“无效签名”。这是我的代码
const express = require('express');
const jwt = require('jsonwebtoken');
const app = express();
app.get('/api', (request, response) => {
response.json({
message: 'This is an Authentication API'
})
})
app.post('/api/posts', verifyToken, (request, response) => {
jwt.verify(request.token, 'secretkey', (err, authData) => {
if(err){
response.json({err});
}
else{
response.json({
message: 'Post was created successfully',
authData
})
}
})
})
app.post('/api/login', (request, response) => {
const user = {
id: 1,
user: 'sarath',
email: 'sarathsekaran@gmail.com'
}
jwt.sign({user}, 'secretKey', (err, token) => {
response.json({
token
});
});
});
//VerifyToken
//Authori FORMAT: Bearer <token>
function verifyToken(request, response, next){
//Get auth header value
const bearerHeader = request.headers['authorization'];
//Checking if bearer is undefined
if(typeof bearerHeader !== 'undefined'){
//Spilt the token from Bearer
const bearer = bearerHeader.split(' ');
const bearerToken = bearer[1];
//Set the token
request.token = bearerToken;
//Next Middleware
next();
}
else{
//Forbidden
response.sendStatus(403);
}
}
app.listen(5000, ()=>console.log('Server Started'));
最佳答案
在创建 jwt token 时,您应该使用唯一的 key ,并且应该将该唯一 key 存储在其他位置,而不是直接存储到代码中。您遇到此错误是因为您的 key 在一个地方有小写的“k”,而在另一处有大写的“k”。
关于javascript - 使用 JWT 进行 API 身份验证总是给出 WebTokenError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698634/