【问题标题】:Is there a way to authorize an express session in a post request?有没有办法在发布请求中授权快速会话?
【发布时间】:2023-04-10 06:12:01
【问题描述】:

我正在尝试确认用户正在发出发布请求,这样任何人都不能只是发布到 URL 并做一些恶意的事情。我如何使用快速会话来做到这一点?还是有更好的方法?

我已经尝试过了,但我猜 req post 中不存在会话。

router.post('/delete', function (req, res, next) {
  if (req.session.user.role === 'owner') {
    // Authorized
    // delete user here then redirect
    res.redirect('/admin');
  } else {
    // Unauthorized
    return res.redirect('/');
  }
})

【问题讨论】:

  • 你在使用会话中间件吗?除此之外:有许多种方式可以实现auth/auth。

标签: javascript node.js express post express-session


【解决方案1】:

这可以通过多种方式完成。一种方法是在标头中发送令牌。要执行授权,可以使用中间件。如下

身份验证中间件:-

const auth = (req, res, next) => {
    const token = req.header('auth-token');
    if(!token) return res.status(401).send('Access denied. No token provided.');

    try{
        const decoded = jwt.verify(token, 'PRIVATE KEY'); // decoding token
        req.user = decoded; // add token details to req
        next();
    }catch (ex){
        res.status(400).send('Invalid Token');
    }
}

授权中间件:-

const admin = (req, res, next) => {
    if(!req.user.isAdmin) return res.status(403).send('Access denied.');

    next();
}

在路由器中,您可以简单地使用负责身份验证和授权的中间件

router.post('/delete', [auth, admin],  function (req, res, next) {
  // do required operation
})

【讨论】:

  • 这看起来不错,唯一的问题是我似乎无法弄清楚如何设置“auth-token”标头。
  • 您必须将其设置为传入请求。您使用的 UI 框架是什么?
  • 现在我没有使用任何框架,只是尝试设置后端。这是我的第一个大项目。
  • 你是如何测试你的 API 的?
  • 我在后端使用 express,然后使用 ejs 渲染页面进行测试。
猜你喜欢
  • 2020-05-02
  • 1970-01-01
  • 2022-11-23
  • 2014-01-30
  • 1970-01-01
  • 2021-12-31
  • 2012-03-28
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多