即使我在授权中输入令牌,JWT也会返回无效的签名错误

时间:2016-02-13 00:56:23

标签: javascript node.js jwt json-web-token express-jwt

我已经看过这个堆栈溢出条目Node.js - Express.js JWT always returns an invalid token error in browser response,但我找不到解决方案。

我试图编写一个小节点应用程序作为使用JWT访问令牌的概念证明。我去了http://jwt.io/并尝试跟随视频教程。我得到了一个令牌生成但是当实际使用令牌时,我得到一个“UnauthorizedError:invalid signature”错误。以下是我的源代码

{{1}}

3 个答案:

答案 0 :(得分:2)

当我尝试将Auth0身份验证集成到我的NodeJS应用程序中时,我遇到了同样的问题。我使用express-jwt模块进行访问令牌身份验证,但遇到了invalid signature错误。就我而言,我使用了错误的客户机密。我已将秘密用于创建的应用程序,但服务器端正确的秘密必须是API秘密。因此,请检查您的凭据,生成令牌的密码必须是API的密码。

答案 1 :(得分:1)

app.use(expressJWT({ secret: 'wutangclan' }).unless({ path: ['/', '/login', '/wutangclan'] }));

你的秘密是'wutangclan' ,这里

let myToken = jwt.sign({username: req.body.username},  '36 chambers');

你的秘密是“36个房间”

答案 2 :(得分:-1)

你应该保持你的秘密不变,有时它会漏掉一个词

exports.signin=(req,res)=>{
    const {email,password}= req.body;

    const errors = validationResult(req);

    if(!errors.isEmpty()){
        return res.status(422).json({
            error: errors.array()[0].msg
        })
    }

    User.findOne({email},(err, user)=>{
        if(err || !user){
            return res.status(400).json({
                error: "user does not exists"
            })
        }

        if(!user.authenticate(password)){
            return res.status(401).json({
                error:"Email and password do not match"
            })
        }

        // create a token

        const token= jwt.sign({_id:user._id}, process.env.SECRET);

        // put a token into a cookie
        res.cookie("token", token,{expire: new Date() + 9999});
        // res.send()

        // response to front end
        const {_id,name, email, role}= user;
        return res.json({token, user: {_id,name,email,role}})

    })
}

// protected routes
exports.isSignedIn = expressJwt({
    
    secret: process.env.SECRET,
    
    userProperty: "auth"
})