使用 JWT (nodeJS) 检查身份验证

我想通过添加中间件“checkAuth”来保护我的路由。该中间件检查 jwt 令牌的有效性。我正在使用 Express 路由器。


但我不明白该怎么做。


我的 checkAuth 中间件:


module.exports = (req, res, next) => {

    let token = req.headers.authorization.split(" ")[1];


    try {

        jwt.verify(token)

        console.log("ok")

    }catch (e) {

        res.status(403)

    }


    next();

}


梵蒂冈之花
浏览 138回答 2
2回答

哈士奇WWW

假设您使用的是 jsonwebtoken,则缺少“secret”字符串。根据文档,你应该这样做。创建令牌时:var jwt = require('jsonwebtoken');var token = jwt.sign({ foo: 'bar' }, 'shhhhh');您还可以传递过期时间:jwt.sign({  data: 'foobar'}, 'secret', { expiresIn: 60 * 60 });用于验证:有几种方法可以做到这一点。但是您应该需要相同的秘密字符串来验证您用于登录的信息。此外,您还需要为 jwt.verify 分配一个变量或通过回调调用它,以便访问解码的数据,例如用户 ID 等。// verify a token symmetric - synchronousvar decoded = jwt.verify(token, 'shhhhh');console.log(decoded.foo) // bar// verify a token symmetricjwt.verify(token, 'shhhhh', function(err, decoded) {  console.log(decoded.foo) // bar});// invalid token - synchronoustry {  var decoded = jwt.verify(token, 'wrong-secret');} catch(err) {  // err}// invalid tokenjwt.verify(token, 'wrong-secret', function(err, decoded) {  // err  // decoded undefined});

慕少森

创建一个名为“verifyToken”的新函数我建议答应一下。async所以你可以在函数中结合使用它awaitfunction verifyToken(token){  return new Promise((res, err) => {    jwt.verify(token, "secret key", (err) => {      if (err) rej(err)      res(true)    })  })}它的承诺是基于的。现在,您只需将令牌传递给它解析为 true 或 false 的函数即可:module.exports = async (req, res, next) => {    let token = req.headers.authorization.split(" ")[1];    try {        await verifyToken(token);        console.log("ok")    }catch (e) {        res.status(403)    }    next();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript