如何在Mean Stack(Node.js + Mongodb)上的用户身份验证中检查当前登录的用户?

维罗妮卡

我有一个带令牌的登录系统。登录时,它将检查该用户是否存在,并且在登录会话期间不了解有关当前用户的信息。检查它并将响应发送到前端的最简单方法是什么?

路线:

function verifyToken(req, res, next) {
  if (!req.headers.authorization) {
    return res.status(401).send('Unauthorized request');
  }
  let token = req.headers.authorization.split(' ')[1];
  if (token === 'null') {
    return res.status(401).send('Unauthorized request');
  }
  let payload = jwt.verify(token, 'secretKey');
  if (!payload) {
    return res.status(401).send('Unauthorized request');
  }
  req.userId = payload.subject;
  next();
}
router.post('/register', (req, res) => {
  let userData = req.body;
  let user = new User(userData);
  user.save((error, registeredUser) => {
    if (error) {
      console.log(error);
    } else {
      let payload = { subject: registeredUser._id };
      let token = jwt.sign(payload, 'secretKey');
      res.status(200).send({ token });
    }
  })
})
router.post('/login', (req, res) => {
  let userData = req.body;

  User.findOne({ email: userData.email }, (error, user) => {
    if (error) {
      console.log(error);
    } else {
      if (!user) {
        res.status(401).send('Invalid email');
      } else
        if (user.password !== userData.password) {
          res.status(401).send('Invalid password')
        } else {
          let payload = { subject: user._id };
          let token = jwt.sign(payload, 'secretKey');
          res.status(200).send({ token });
        }
    }
  })
})
塞萨尔·托马蒂斯(Cesar Tomatis)

您可以尝试使用中间件从Authorization标头中检索令牌并从那里检索userId,中间件可能看起来像这样:

const decodeToken = (token) => {
    return jwt.verify(token, 'secretKey', (err, decoded) => {
        if (err) {
            return undefined;
        }
        return decoded;
    });
};

const authorize = (req, res, next) => {
    if (!req.headers.authorization) {
        return res.status(401).send({message: 'UNAUTHORIZED'});
    }
    const token = req.headers.authorization.split(' ')[1];
    if (!token) {
        return res.status(401).send({message: 'UNAUTHORIZED'});
    }
    const decodedToken = decodeToken(token);
    if (!decodedToken) {
        return res.status(401).send({message: 'UNAUTHORIZED'});
    }
    req.userId = decodedToken.subject;
    next();
};

module.exports = authorize;

希望这对您有所帮助,如果没有,希望您找到答案:)

编辑

要使用中间件,您只需要将其添加到路由中,我将为您提供一个带有get请求的示例:

const authorize = require('../middleware/authorize');

router.get('/someroute', authorize, (req, res) => {
  // authorize will verify the token and attach the userId to your request
  // so to use it you'll only need to call req.userId
  // something like this
  console.log('current logged user id', req.userId);

  // YOUR CODE HERE
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

通过Node.js上的Azure函数获取当前经过身份验证的用户名

来自分类Dev

如何检查用户是否在Service Stack Client中通过了身份验证?

来自分类Dev

Linux 上 node.js 应用程序中的操作系统用户身份验证

来自分类Dev

如何使用node.js中的基本身份验证从URL获取用户名和密码?

来自分类Dev

如何在odoo和Node js中获取当前登录的用户ID

来自分类Dev

如何在中间件中使用 firebase 作为 node.js 的登录身份验证?

来自分类Dev

如何在MEAN.js和Node.js中管理资产(css)

来自分类Dev

如何在MEAN.js和Node.js中管理资产(CSS)

来自分类Dev

如何测试使用JWT身份验证的Node API(通过用户登录获取令牌)

来自分类Dev

在Firebase中,如何从自定义jwt令牌身份验证获取当前登录的用户

来自分类Dev

如何从Django模板中的当前经过身份验证的用户检查模型中记录的存在?

来自分类Dev

错误:用户未在Node.js中通过身份验证的Amazon Cognito

来自分类Dev

用户仍在对会话进行身份验证时单击“后退”按钮,并将其重定向到node.js中的登录页面

来自分类Dev

使用laravel身份验证时,如何检查用户是否已在React组件中“登录”?

来自分类Dev

如何在node / mean / express应用程序中拆分index.js文件?

来自分类Dev

您如何在Node.js中对GitHub App进行身份验证?

来自分类Dev

如何在Node JS JWT身份验证中设置角色?

来自分类Dev

MEAN Stack:如何在不提供域名的情况下使用交付node.js应用程序?

来自分类Dev

如何使用Node.js和MEAN堆栈进行身份验证?

来自分类Dev

如何在Firebase React JS中将集合添加到经过身份验证的用户?

来自分类Dev

如何在laravel子域中检查身份验证用户?

来自分类Dev

如何在laravel子域中检查身份验证用户?

来自分类Dev

如何从angularfire2获取当前以身份验证状态登录的用户

来自分类Dev

Passport.js用户登录和身份验证

来自分类Dev

使用MEAN Stack进行用户注册和身份验证/授权

来自分类Dev

使用Node.js和Passport进行身份验证后,如何将用户重定向至带有其ID的主页?

来自分类Dev

如何在Node.js环境中处理用户代理?

来自分类Dev

如何在node.js中从mongodb获取用户信息

来自分类Dev

如何在MEAN STACK网络应用中启用CORS?

Related 相关文章

  1. 1

    通过Node.js上的Azure函数获取当前经过身份验证的用户名

  2. 2

    如何检查用户是否在Service Stack Client中通过了身份验证?

  3. 3

    Linux 上 node.js 应用程序中的操作系统用户身份验证

  4. 4

    如何使用node.js中的基本身份验证从URL获取用户名和密码?

  5. 5

    如何在odoo和Node js中获取当前登录的用户ID

  6. 6

    如何在中间件中使用 firebase 作为 node.js 的登录身份验证?

  7. 7

    如何在MEAN.js和Node.js中管理资产(css)

  8. 8

    如何在MEAN.js和Node.js中管理资产(CSS)

  9. 9

    如何测试使用JWT身份验证的Node API(通过用户登录获取令牌)

  10. 10

    在Firebase中,如何从自定义jwt令牌身份验证获取当前登录的用户

  11. 11

    如何从Django模板中的当前经过身份验证的用户检查模型中记录的存在?

  12. 12

    错误:用户未在Node.js中通过身份验证的Amazon Cognito

  13. 13

    用户仍在对会话进行身份验证时单击“后退”按钮,并将其重定向到node.js中的登录页面

  14. 14

    使用laravel身份验证时,如何检查用户是否已在React组件中“登录”?

  15. 15

    如何在node / mean / express应用程序中拆分index.js文件?

  16. 16

    您如何在Node.js中对GitHub App进行身份验证?

  17. 17

    如何在Node JS JWT身份验证中设置角色?

  18. 18

    MEAN Stack:如何在不提供域名的情况下使用交付node.js应用程序?

  19. 19

    如何使用Node.js和MEAN堆栈进行身份验证?

  20. 20

    如何在Firebase React JS中将集合添加到经过身份验证的用户?

  21. 21

    如何在laravel子域中检查身份验证用户?

  22. 22

    如何在laravel子域中检查身份验证用户?

  23. 23

    如何从angularfire2获取当前以身份验证状态登录的用户

  24. 24

    Passport.js用户登录和身份验证

  25. 25

    使用MEAN Stack进行用户注册和身份验证/授权

  26. 26

    使用Node.js和Passport进行身份验证后,如何将用户重定向至带有其ID的主页?

  27. 27

    如何在Node.js环境中处理用户代理?

  28. 28

    如何在node.js中从mongodb获取用户信息

  29. 29

    如何在MEAN STACK网络应用中启用CORS?

热门标签

归档