Успешно сгенерировал токен, но все еще не авторизован при его использовании - PullRequest
0 голосов
/ 11 марта 2019

Обновление с исправлением для людей с такой же проблемой:

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

$this->middleware('auth);

в свой метод __construct.Я не создавал оригинальное приложение Laravel, но я полагаю, что это промежуточное программное обеспечение происходит оттуда, поскольку для входа в систему требовалось создать файл cookie сеанса.

Теперь мой код, размещенный ниже, работает отлично!


Исходное сообщение

Как вы могли видеть в моей истории сообщений, эта проблема былачто-то давало мне покоя, и я чувствую, что уже все перепробовал, и вот я снова.Проблема:

Я настроил свой сервер авторизации, используя laravel-passport, подключаясь к серверу API.Из React SPA я звоню на сервер авторизации (используя axios, если это имеет значение), где я отправляю имя пользователя (которое является электронной почтой) и пароль и, если он принят, возвращает токен доступа.Все это работает, и теперь я хочу отправить запрос на получение данных с помощью моего токена доступа.Это делается с помощью следующего кода:

var config = {
  headers: { 'Authorization': "Bearer " + accessToken }
};
await axios.get('http://apiServer/api/details', {data: 'data'}, config)
  .then(response => {
    console.log('user: ', response)
  })

, который вызывает маршрут

Route::middleware('auth:api')->group(function () {
  Route::get('/user', 'ApiController@getUser');
});

, который вызывает функцию

    public function details()
{
    $user = Auth::user();
    return response()->json(['success' => $user], 200);
}

Это не работает, иЯ получаю несанкционированное (401) сообщение.Маркер API выглядит корректно, и я уверен, что вызов axios имеет правильный синтаксис (часть data: 'data' просто следит за тем, чтобы он не считывал аргумент config в качестве аргумента data).

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

Единственное, что выглядит подозрительно, - это то, что оба моих клиента oauth имеют user_id null.Я не уверен на 100%, как они работают, поэтому я спросил об этом здесь .Крис Келкер дал ответ, на который я надеялся, но я не смог его реализовать, так как я не уверен, как напрямую изменить oauth-файлы в паспорте, или я вообще должен это делать.

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

Заранее спасибо, Ричард.

По запросу, вот код, генерирующийтокен:

    public function loginToken()
{
    if (Auth::attempt(['email' => request('email'), 'password' => request('password')])) {
        $user = Auth::user();

        $success['token'] = $user->createToken('MyApp')->accessToken;
        return response()->json(['success' => $success], 200);
    } else {
        return response()->json(['error' => 'Unauthorised'], 401);
    }
}

Код для получения токена в моем приложении реакции:

const accessTokenData = await axios.post('http://my-app/api/loginToken', {email: 'myemail@email.com', password: 'myPassword'});
const accessToken = accessTokenData.data.success.token;

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

Обновление с исправлением для людей с такой же проблемой:

Я наконец-то получил разрешение токена на работу. Я полагаю, что проблема могла заключаться в том, что в моем UserController.php я поместил

$ this-> промежуточного слоя ( 'аутентификации); в моем методе __construct. Я не создавал оригинальное приложение Laravel, но я полагаю, что это промежуточное программное обеспечение исходит оттуда, поскольку для входа в систему требовался файл cookie сеанса.

Теперь мой код, размещенный ниже, работает отлично!

0 голосов
/ 11 марта 2019

Можете ли вы выйти, например, через что вы отправляете. Возможно, вы не обновляете переменную держателя токена перед отправкой.

...