На моей установке Laravel я настроил Dingo API
вместе с JWT-Auth
по Tymondesigns и Laravel-cors
по barryvdh.
Это процесс входа в систему и извлечения данных из внешнего интерфейса (который размещен на другом сервере):
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
«s $this->response()->item($user, new SelfTransformer());
отправить данные обратно.Так что на данный момент все, кажется, работает нормально. Пользователь вошел в систему, пользовательский объект заполнен всеми необходимыми вещами, а таблица сообщений заполнена сообщениями.
Я разбиваю сообщения на страницы, поэтому в данный момент я получаю только 1 сообщение за раз.
Теперь проблема в том, что после этой точки (после того, как пользовательский объект извлечен), если я сделаю еще один запрос, скажем, /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
а второй фактический запрос …
Я впадаю в депрессию …
Я не уверен.
В вашем app/Http/routes.php
положи это наверх и посмотри.
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT');
header("Access-Control-Allow-Headers: Authorization, X-Requested-With, Content-Type, Accept");
Надеюсь, поможет!
Это предполетный запрос, я думаю, что это нормально