node.js - Express 中间件 jsonwebtoken 身份验证

标签 node.js express json-web-token

我的服务器有一个注册 api,在注册后提供 token ,以及一个验证用户 token 的中间件。我需要注册一个帐户才能获取 token 才能对我的服务器执行其他操作。但是,中间件阻止了我的网络请求,因为我还没有 token 。

那么在这种情况下我该如何创建我的帐户和 token 呢?通过一些技巧来通过中间件?

中间件:

  // Middleware to verify token, it will be called everytime a request is sent to API
  api.use((req, res, next)=> {
    var token = req.headers.token
    if (token) {
      jwt.verify(token, secret, (err, decoded)=> {
        if (err) {
          res.status(403).send({ success: false, message: "Failed to authenticate user." })
        } else {
          req.decoded = decoded
          next()
        }
      })
    } else {
      res.status(403).send({ success: false, message: "No Token Provided." })
    }
  })

登录:

  // Sign In with email API
  api.post('/signInWithEmail', (req, res)=> {
    User.findOne({
      email: req.body.email
    }).select(userFields).exec((err, user)=> {
      if(err) {
        throw err
      }
      if (!user) {
        res.send({ message: "User doesn't exist"});
      } else if (user) {
        var validPassword = user.comparePassword(req.body.password);
        if (!validPassword) {
          res.send({ message: "Invalid Password"});
        } else {
          var token = createToken(user);
          res.json({
            success: true,
            message: "Login Successfully!",
            token: token
          })
        }
      }
    })
  })

最佳答案

创建一个函数来检查 token 并公开您的路由,以便每当您需要调用经过身份验证的路由时,您将首先检查 token ,然后公开该路由。

示例代码

假设这是我的支票 token 函数

function checkToken(req, res, next) {
var x = req.token; //This is just an example, please send token via header
    if (x === token)
    {
       next();
    }
    else
    {
       res.redirect(/unauthorized); //here do whatever you want to do
    }
    }

现在让我们使用路由函数。

app.post('/protectedroute', checkToken, routename.functionname);
app.post('/notprotected', routename.functionname);

如果您想为不同的代码设置单独的路由,则由您决定,否则您可以通过将它们保留在主文件的函数等中来调用特定的代码块,即 app.jsserver.js,无论您选择什么。

我们实际上在这里做的是 - 我们正在制作自己的中间件,通过代码块或函数的 channel 公开我们的路由。

关于node.js - Express 中间件 jsonwebtoken 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37955182/

相关文章:

javascript - 使用 multer 接收 FormData 对象作为 node.js 服务器

jwt - npm 模块 jsonwebtoken 和 jwt-simple 有什么区别?

javascript - 在 http 请求中包含 Web token

node.js - NodeJS 读取 TTY 串口

node.js - 用户未定义 : Nodejs/Express + Passport

javascript - 通过 FastCGI 使用 ExpressJS 应用程序

Firebase admin().auth().getUser(uid) 错误 : An internal error has occurred 'auth/internal-error'

javascript - 谁能解释 V8 字节码 LdaTheHole?

node.js - 从 Azure IoT Edge 设备到子设备的直接方法调用,无需 Internet 连接

javascript - 如何使用 Express res.send() 发送数组