Zeit Now без сервера аутентифицированных запросов сбой из-за CORS - PullRequest
2 голосов
/ 14 апреля 2020

Я не могу правильно обрабатывать проблемы с CORS при выполнении запросов PATCH / POST / PUT от браузера, отправляющих заголовок Authorization с Bearer token (это работает правильно вне браузера и для GET запросов) в Zeit Now без сервера .

Я использую Auth0 для стороны авторизации, если это помогает.


Это мой раздел now.json заголовков, я пробовал много комбинаций для них, но ни один из них не получился из браузера.

Headers in now.json


  1. Я попытался использовать npm cors пакет безуспешно
  2. Попытался добавить routes в now.json
  3. Попробовал установить заголовки в верхней части функции без сервера используя res.addHeader()
  4. Также попытался обработать OPTIONS запрос вручную, выполнив следующие варианты:

OPTIONS method custom handling

Наконец, это это ошибка, которую я получаю

Access to XMLHttpRequest at 'https://api.example.org/api/users' from origin 'https://example.org' has been blocked by CORS policy: 
Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Не уверен, что я не прав или как правильно с этим справиться.

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Мне удалось обойти эту проблему, используя микро-корс .

Я проверил его код , и он не сильно отличается от того, что я пытался сделать себя вручную, используя res.setHeader, вероятно, что-то пропустил.

Тем не менее, я не понимаю, почему настройки в now.json не работали правильно, и мне нужно выполнить это вручную в функции без сервера.

В любом случае, в случае, если кто-то еще найдет этот пост, у меня получится что-то вроде этого:

import micro from "micro-cors";

function MyApi(req, res) {
  if (req.method === "OPTIONS") {
    return res.status(200).end();
  }
  // handling other requests normally after this
}

const cors = micro();

export default cors(MyApi);

Я, вероятно, попробую еще раз с самописным решением, чтобы понять лучше, что пошло не так, а также потому, что я не хочу дополнительной зависимости.

Обновлю этот ответ, если я сделаю это.

0 голосов
/ 24 апреля 2020

Я столкнулся с подобной проблемой, и проблема была решена путем добавления заголовка к маршрутам следующим образом:

"routes": [
    {
      "src": ".*",
      "methods": ["GET", "POST", "OPTIONS"],
      "headers": {
        "Access-Control-Allow-Origin": "*",
        "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept",
        "Access-Control-Allow-Credentials": "true"
      },
      "dest": "index.js",
      "continue": true
    },
    {
      "src": "/user/login", "methods": ["POST"], "dest": "index.js"
    }
  ]

не забудьте добавить continue: true.

https://github.com/super-h-alt/zeit-now-cors-problems/blob/master/now.json

...