Проблемы с аутентификацией Laravel Passport: всегда возвращаются без проверки подлинности

Просматривая десятки ответов, я все еще не могу найти решение его проблемы.

проблема

Каждый раз, когда я делаю аутентифицированный запрос, ответ {"error":"Unauthenticated."}

Маршруты

Вот маршруты, с которыми я тестировал.

use Illuminate\Http\Request;
use Laravel\Passport\Http\Middleware\CheckClientCredentials;

Route::get('/test', function () {
return 'Hello World';
})->middleware('auth:api');

Route::middleware('auth:api')->get('/test2', function (Request $request) {
return 'Hello World';
});

Настроить

Я настроил этот проект в соответствии с инструкцией и использовал PHP artisan Команды для построения моей базы данных. Я тогда начал использовать Почтальон, чтобы проверить это.

Токен получен с использованием grant_type: password, учетные данные клиента и учетные данные пользователя. "Bearer " . $token тип затем предоставляется.

Что я сделал и протестировал

Я проверил .htaccess, дату истечения срока действия токена, пространства имен и другие распространенные ошибки. Я установил тестовую функцию для проверки информации моего заголовка. Результаты размещены ниже. По какой-то причине проблема сохраняется. Также нет никаких фактических ошибок … Никаких обновлений error.log, просто ответ от API, сообщающий мне, что пользователь не аутентифицирован.

 array:12 [
"cookie" => array:1 [
0 => "XSRF-TOKEN=eyJpdiI6IkwrNGxLOGVtc1M1Y2lYeUMraldTK3c9PSIsInZhbHVlIjoibHRzdVo3bFVJOFhuMDJvZ3RoNEYxK1NsdmhRenZkbmp5b2xuYXVzWTdIUGJ2WGFUbXBiK1JFQ0VNSVlNbjdIbHVmcndmKzBaMzVJbGkxelZFdllhM0E9PSIsIm1hYyI6ImZhMDJjZDIwNDgxMTRkMDdjYTBkYmMwODc4YzQ4ZmM3OGFkZTI3NzY1ZDA5NTAyODhkYjRlNTY1OGUyMTYyNGEifQ%3D%3D;  laravel_session=eyJpdiI6Im5hTnVLS3cyc1BzQldudkN2bFNcLzZRPT0iLCJ2YWx1ZSI6IjIwXC8yRkM3Sk4rWkg0ZFFlaG9RYVErc2ZJT0taSHoxOTU3UVpxejdPZ2MzcHBSc2FCd1NweEZwU2kzQXUxZ1VCVmY1dzZIZldFb2J5QXkwMFwvZmpId1E9PSIsIm1hYyI6ImQxZDIzOGQ0NzllOTg4NmZmZDk2NGI1NDNhMzcwNmI1MWE2MzY0YWIzZTgxZjYzOTAxYjhlMWQ1ZTExNzBiMTEifQ%3D%3D"]
"accept-language" => array:1 [
0 => "en-US,en;q=0.8,fr;q=0.6"]
"accept-encoding" => array:1 [
0 => "gzip, deflate, sdch"]
"postman-token" => array:1 [
0 => "864e4343-e8f1-2efd-1a75-11660313ba3d"]
"authorization" => array:1 [
0 => "Bearer 0dea6edd3f655463c4e19cf26ef10755bcfbff5dcdbe44cd44c1d7a84c250c359c65f064737752e6"]
"cache-control" => array:1 [
0 => "no-cache"]
"accept" => array:1 [
0 => "application/json"]
"connection" => array:1 [
0 => "close"]
"x-http-proto" => array:1 [
0 => "HTTP/1.1"]
]

Подозрения

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

(Правка 1) Проблемы с областью: Эй, это может быть проблемой с scope жетонов?

(Изменить 2) Ошибка SQL Мне удалось найти ошибку, чтобы отработать. Это немного странно, хотя.

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'api_token' in 'where clause' (SQL: select * from `users` where `api_token` = {AccessToken} limit 1)

1

Решение

У меня действительно было несколько проблем с моей программой, но даже после их решения у меня все еще были ошибки.

  1. Моя база данных не была настроена должным образом

  2. Мой «Порядок действий» был выключен. Я продолжал запрашивать токены и настраивать клиентов в неправильном порядке. Я думал о своих клиентах как о пользователях, что неверно и является корнем многих моих проблем.

  3. Я неправильно использовал инструмент в целом. Я никогда не пытался войти в учетную запись пользователя, только клиентская. Это, конечно, не имеет смысла, и именно поэтому я потерпел неудачу.

Поэтому я решил полностью отказаться от использования Passport.

Что если мне все еще нужно получить паспорт?

Поскольку мое решение не требовало, чтобы я работал с паспортом, я могу только вам очень помочь. Когда я наконец понял, как проходить аутентификацию, я понял, что мне это не нужно …

  1. Убедитесь, что ваша база данных настроена правильно. Вы можете проверить это, выполнив собственные вызовы базы данных внутри маршрутизатора для отладки. Убедитесь, что вы можете получить доступ ко всем обязательным полям.
  2. Используйте клиентов правильно. Я пытался использовать клиентов, как будто они были пользователями, потому что я думал, что это лучший способ реализовать токен API. Это не. Убедитесь, что у вас уже настроены учетные записи пользователей, и относитесь к клиентам как к «окну», через которое может пройти приложение, сторонние разработчики и т. Д. Возможно, сделайте шаг назад и спланируйте его немного больше.

Что если мне не нужен паспорт?

Если вы находитесь в той же лодке, что и я, и на самом деле лучше не использовать Passport, тогда я предлагаю перейти с базовой аутентификацией внутри Laravel. Его легко настроить, и обучение не займет много времени.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]