【问题标题】:403 forbidden on express. Can't accept Authorization header403禁止快递。无法接受授权标头
【发布时间】:2018-06-18 20:47:37
【问题描述】:

我有一个 REST Api,当用户拥有身份验证令牌(我使用 jwt 令牌)时,所有端点都必须发送响应。 当我使用邮递员测试我的代码时,一切正常,但从前面不工作(会话在 OPTION 请求后关闭,并且请求标头不记名令牌未设置)。

身份验证中间件

module.exports = function(req, res, next) {
    const authorization = req.headers['authorization'];
    console.log(authorization);
    const token = authorization
      ? authorization.replace('Bearer ', '')
      : null;

    if (!token) 
      return res.status(403).send({ auth: false, message: 'No token provided.' });

    jwt.verify(token, config.secret, function(err, decoded) {      
      if (err) 
        return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });    

      req.userId = decoded.id;
      next();
    });
}

路线

const Router                = require('express').Router;

//Authentication Middleware
const requireAuthentication = require('../middlewares/').Auth()

module.exports = () => {
  let router = new Router();
  router.use(requireAuthentication);
  router.use('/accounts', require('./account')());
  router.use('/projects', require('./projects')());
  return router;
};

有认证 https://i.stack.imgur.com/cAFw5.png

无需认证 https://i.stack.imgur.com/VUuuv.png

【问题讨论】:

  • 您好,请问您是不是把截图弄混了?
  • 不,好吧..
  • 我的意思是从服务器端检查身份验证

标签: node.js express postman angular6 httpforbiddenhandler


【解决方案1】:

原因在于访问标头

我在引导文件中添加中间件。

app.use(function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');

    if ('OPTIONS' === req.method) {
      res.send(200);
    }
    else {
      next();
    }
});

【讨论】:

    【解决方案2】:

    尝试使用 Express Cors:https://github.com/expressjs/cors

    简单使用(启用所有 CORS 请求)

    var express = require('express')
    var cors = require('cors')
    var app = express()
    
    app.use(cors())
    
    app.get('/products/:id', function (req, res, next) {
      res.json({msg: 'This is CORS-enabled for all origins!'})
    })
    
    app.listen(80, function () {
      console.log('CORS-enabled web server listening on port 80')
    })
    

    跨源资源共享 (CORS) 是一种机制,它使用额外的 HTTP 标头告诉浏览器让在一个源(域)运行的 Web 应用程序有权访问来自不同源的服务器的选定资源。当 Web 应用程序请求的资源与自己的来源不同(域、协议和端口)时,它会发出跨域 HTTP 请求。

    在此处阅读有关 CORS 的更多信息https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

    【讨论】:

      猜你喜欢
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2021-01-30
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多