Как разобрать пользователя из access_token?

В настоящее время у меня есть 2 сервера: 1 сервер Laravel / сервер API, 1 сервер внешнего интерфейса, на котором работает Vue SPA.

Проблема, с которой я столкнулся, - это проблема аутентификации. Из моего приложения Vue я могу успешно войти в систему через аутентификацию API, используя предоставление пароля.

Запрос axios попадет в конечную точку аутентификации, которая:

$response = $http->post(env('APP_URL').'/oauth/token', [
    'form_params' => [
        'grant_type' => 'password',
        'client_id' => $client->id,
        'client_secret' => $client->secret,
        'username' => $credentials['email'],
        'password' => $credentials['password'],
        'scope' => '',
    ],
]);

Взамен я получаю токены, которые храню в localStorage. На более позднем этапе в моем приложении Vue я пытаюсь сделать еще один запрос API для этого вошедшего в систему пользователя, используя токены, которые я получил от предоставления пароля.

let config = {
    headers: {'Authorization': "Bearer " + state.tokens.access_token}
};

window.axios.post('/purchases', {
    form: state.form,
}, config)
    .then(function (response) {
        console.log(response);
    })
    .catch(function (error) {
        console.log(error.response);       
    }); 

Но я получаю ошибку 401

Ошибка: «Не аутентифицирован».

Я предполагал, что промежуточное ПО auth:api будет анализировать токен доступа для пользователя, но, похоже, это не так.

Как я могу проанализировать пользователя, который после срабатывания моей /purchases конечной точки может получить доступ к пользователю $request->user()?


person Chris    schedule 15.04.2018    source источник
comment
Проверить заголовок запроса, правильно ли установлен токен?   -  person Muhammad Nauman    schedule 15.04.2018
comment
@chris вы vuex, если да. при каждом обновлении вашего хранилища уничтожайте вместо vuex сохраняйте его в localstorage, это не создает никаких проблем с безопасностью, но помните, что после входа в систему или закрытия браузера очистите эту вещь   -  person bipin    schedule 15.04.2018
comment
@MuhammadNauman Да, он настроен правильно.   -  person Chris    schedule 16.04.2018


Ответы (1)


привет Крис, есть 2 пути

способ 1

  router.beforeEach((to, from, next) => {


   axios.defaults.headers.common['authorization'] =store.state.userStore.authUser //this is globaly defind header
      //put your login over here
 }
});

в этом я устанавливаю заголовок axios при каждом запросе

метод 2

передайте свой токен в свой URL-адрес примерно так, предположим, что вы URL-адрес, например, localhost / laravel / public / api / anyname? access_token = '+ localstoragevalue

person bipin    schedule 15.04.2018
comment
Спасибо! Не поймите меня неправильно, у меня нет проблем с передачей токена в заголовке. Проблема, с которой я столкнулся, заключается в том, чтобы получить от него пользователя. - person Chris; 16.04.2018
comment
@Chris хранит токен, а также идентификатор пользователя в другой таблице после входа в систему, т.е. код записи в контроллере входа в систему, а другой метод заключается в создании дополнительного столбца в таблице пользователей (столбец токена), и этот процесс будет выполняться в обоих методах создания промежуточного программного обеспечения, чтобы проверить, какой пользователь его принадлежит, например: -find, где токен, это токен запроса, если он найден, заставьте его войти в систему, иначе перенаправить на домашнюю страницу, после этого все будет оставаться таким же, как обычный вход в систему без токена - person bipin; 16.04.2018