На моей установке Laravel я установил Dingo API
вместе с JWT-Auth
фирмой tymondesigns и Laravel-cors
от barryvdh.Метод Laravel + Dingo + JWT + cors and OPTIONS
Это процесс входа в систему и получения данных от переднего конца (который размещен на другом сервере):
POST
учетные данные кAPI
- получают
JWT
маркер, который затем сохраняется вlocalStorage
сBearer
ключ спереди. После этой точки перехватчик автоматически получает и устанавливает заголовок авторизации с токеномJWT
. POST
запрос отправляется на адрес/users/me
, который является лишь способом получения пользовательских данных. Данные пользователя поступают сusername, email, permissions and messages
.messages
является модельюEloquent
, гдеUser::class
в основномhasMany(Message::class)
. Кстати, метод, который извлекает пользовательские данные, читает пользователя с использованием$user = JWT::parseToken()->authenticate();
, а затем я используюDingo
$this->response()->item($user, new SelfTransformer());
для отправки данных назад.
Так что на данный момент все работает нормально. Пользователь вошел в систему, пользовательский объект заполнен всеми необходимыми материалами, а таблица сообщений заполнена сообщениями.
Я разбиваю страницы на сообщения, поэтому на данный момент я получаю всего одно сообщение за раз.
Теперь вопрос заключается в том, что после этого момента (после того, как объект пользователя извлекается), если я сделаю еще один запрос, скажем к /users/me?messages=2
, чтобы получить вторую страницу сообщений, я получаю следующее сообщение об ошибке: No 'Access-Control-Allow-Origin' header is present on the requested resource.
Я получаю ту же ошибку, если попытаюсь выйти из системы.
Я получаю ту же ошибку, если попытаюсь зарегистрироваться у уже зарегистрированного пользователя.
Так что каждый раз, когда в Laravel исключается исключение, заголовок Access-Control-Allow-Origin
больше не задан.
Это моя конфигурация CORS:
return [
/*
|--------------------------------------------------------------------------
| Laravel CORS
|--------------------------------------------------------------------------
|
| allowedOrigins, allowedHeaders and allowedMethods can be set to array('*')
| to accept any value.
|
*/
'supportsCredentials' => true,
'allowedOrigins' => ['*'],
'allowedHeaders' => ['Content-Type', 'Accept', 'Authorization', 'X-Requested-With', 'Origin'],
'allowedMethods' => ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
'exposedHeaders' => ['Authorization'],
'maxAge' => 0,
'hosts' => [],
];
Если я использую Почтальон, все работает отлично.
Кроме того, я заметил, что на моей вкладке в сети все 2 запроса заданы. Один метод имеет набор для OPTIONS
и второй один фактический запрос ...
Я получаю депрессию ...
Такая же проблема здесь – Maykonn