科尔斯和标题

时间:2017-08-15 15:42:16

标签: javascript node.js express cors

我在使用cors和header时遇到了麻烦。我有以下中间件:

res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type,X-Access-Token,Authorization');
next();

之后我有另一个中间件来检查令牌:

const token = req.body.token || req.query.token || req.headers['x-access-token'];

    if (token) {
        jwt.verify(token, config.jwtKey, (err, decoded) => {
            if(err) {
                return res.json({success: false, errmsg: 'Wrong key'});
            } else {
                req.decoded = decoded;
                next();
            }
        });
    } else {
        return res.status(403)
            .send({
                success: false,
                message: "No token provided"
            });
    }

但是当我记录req.headers:

{ host: 'localhost:4556',
  connection: 'keep-alive',
  'access-control-request-method': 'POST',
  origin: 'http://localhost:4200',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36',
  'access-control-request-headers': 'authorization,content-type,x-access-token',
  accept: '*/*',
  dnt: '1',
  referer: 'http://localhost:4200/posts',
  'accept-encoding': 'gzip, deflate, br',
  'accept-language': 'sv,en-US;q=0.8,en;q=0.6' }

没有" X-access-token"在我的标题中,除了" access-control-request-headers"。它只是名字。有些东西肯定是错的,但我用谷歌搜索时发现的只是使用Access-Control-Allow-Headers

1 个答案:

答案 0 :(得分:2)

您正在查看preflight OPTIONS request。可以通过许多条件触发,其中一个条件是“设置非标准标题”(如X-access-token)。

浏览器不会发出POST请求(带有X-access-token标头),直到服务器响应OPTIONS请求给予权限。

您需要从令牌检查中间件中排除OPTIONS请求,以便您不会发回403以响应预检(永远不会包含令牌)。