为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

梵蒂冈之花 2023-07-29 15:18:52
我想通过添加中间件“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();}
查看完整描述

2 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

假设您使用的是 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 - synchronous

var decoded = jwt.verify(token, 'shhhhh');

console.log(decoded.foo) // bar


// verify a token symmetric

jwt.verify(token, 'shhhhh', function(err, decoded) {

  console.log(decoded.foo) // bar

});


// invalid token - synchronous

try {

  var decoded = jwt.verify(token, 'wrong-secret');

} catch(err) {

  // err

}


// invalid token

jwt.verify(token, 'wrong-secret', function(err, decoded) {

  // err

  // decoded undefined

});


查看完整回答
反对 回复 2023-07-29
?
慕少森

TA贡献2019条经验 获得超9个赞

创建一个名为“verifyToken”的新函数


我建议答应一下。async所以你可以在函数中结合使用它await


function 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();

}


查看完整回答
反对 回复 2023-07-29
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信