Javascript 使用JWT的API身份验证始终会导致WebTokenError

Javascript 使用JWT的API身份验证始终会导致WebTokenError,javascript,node.js,jwt,Javascript,Node.js,Jwt,我一直在学习JWT,我面临这样一个问题,其中的响应是JsonWebTokenError。令牌生成工作正常。但是令牌的验证给了我一个错误,指出“JsonWebTokenError”带有消息“invalid signature”。这是我的密码 const express = require('express'); const jwt = require('jsonwebtoken'); const app = express(); app.get('/api', (request, respon

我一直在学习JWT,我面临这样一个问题,其中的响应是JsonWebTokenError。令牌生成工作正常。但是令牌的验证给了我一个错误,指出“JsonWebTokenError”带有消息“invalid signature”。这是我的密码

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'));
const express=require('express');
const jwt=require('jsonwebtoken');
常量app=express();
app.get('/api',(请求、响应)=>{
response.json({
消息:“这是一个身份验证API”
})
})
app.post('/api/posts',verifyToken,(请求,响应)=>{
jwt.verify(request.token,‘secretkey’,(err,authData)=>{
如果(错误){
json({err});
}
否则{
response.json({
消息:“已成功创建帖子”,
authData
})
}
})
})
app.post('/api/login',(请求、响应)=>{
常量用户={
id:1,
用户:“sarath”,
电邮:'sarathsekaran@gmail.com'
}
jwt.sign({user},'secretKey',(err,token)=>{
response.json({
代币
}); 
});
});
//验证令牌
//作者格式:无记名
功能验证令牌(请求、响应、下一步){
//获取身份验证标头值
const bearerHeader=request.headers['authorization'];
//检查持票人是否未定义
if(bearerHeader的类型!=“未定义”){
//把信物从持票人手中泼了出去
const bearer=bearerHeader.split(“”);
const bearerToken=bearer[1];
//设置令牌
request.token=bearerToken;
//下一代中间件
next();
}
否则{
//禁止的
响应。发送状态(403);
}
}
app.listen(5000,()=>console.log('Server Started');

在创建jwt令牌时,您应该使用唯一的密钥,并且应该将该唯一密钥存储在其他地方,而不是直接存储到代码中。您正面临此错误,因为您的密钥在一个位置有小写字母“k”,在另一个位置有大写字母。

在创建jwt令牌时,您应该使用唯一的密钥,并且应该将该唯一密钥存储在其他位置,而不是直接存储到代码中。您正面临此错误,因为您的密钥在一个位置有小写字母“k”,在另一个位置有大写字母。

一旦您使用secretkey和one secretkey。事实上,它应该是相同的。一旦你使用secretkey和Once secretkey。事实上,应该是一样的。