javascript - 使用 JWT 进行 API 身份验证总是给出 WebTokenError

标签 javascript node.js jwt

我一直在学习 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/

相关文章:

javascript - 使用 jQuery 加载 CSS 而不将样式应用到页面

javascript - Mozilla Rhino 上的 Socket.io

api - API网关如何通过内省(introspection)验证访问 token

javascript - Promises 和 Deferred : . did() 和 .then() 被调用,尽管 .resolve() 在 Deferred 对象上被调用

javascript - 在触摸滚动条中居中文本

javascript - 词干查询elasticsearch

java - 在 JWT 身份验证设置中处理刷新 token 的最可扩展/最安全的方法是什么?

java - 请求的资源上不存在 'Access-Control-Allow-Origin' header ,并且 JWT token 不以 Bearer String 开头

javascript - 从 API 获取并更新 React comp 的状态

JavaScript:不会停止执行以下行的回调