2016-03-02 3 views
0

На моей установке Laravel я установил Dingo API вместе с JWT-Auth фирмой tymondesigns и Laravel-cors от barryvdh.Метод Laravel + Dingo + JWT + cors and OPTIONS

Это процесс входа в систему и получения данных от переднего конца (который размещен на другом сервере):

  1. POST учетные данные к API
  2. получают JWT маркер, который затем сохраняется в localStorage с Bearer ключ спереди. После этой точки перехватчик автоматически получает и устанавливает заголовок авторизации с токеном JWT.
  3. 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 и второй один фактический запрос ...

Я получаю депрессию ...

+0

Такая же проблема здесь – Maykonn

ответ

0

Я не уверен. В вашем 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"); 

Надеюсь, это поможет!

0

Это предполетный запрос, я думаю, что это нормально

Смежные вопросы