Laravel 5.3 использует собственный API

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

Я знаю, что Laravel 5.3 теперь реализует Laravel Passport, но как я могу использовать свой собственный API, то есть пользователь, который подписывается, получает токен аутентификации / API-токен, а затем каждый запрос к серверу проверяет этот токен, пока у меня есть следующее, в мои маршруты API,

Route::group(['middleware' => 'auth:api'], function () {
Route::get('classes', 'ClassController@index');
Route::get('classes/{id}', 'ClassController@show');
Route::post('classes', 'ClassController@create');
Route::put('classes', 'ClassController@edit');
Route::delete('classes', 'ClassController@destroy');
});

В моем http / kernal.php я добавил,

\Laravel\Passport\Http\Middleware\CreateFreshApiToken::class

В мой массив $ middleWareGroups.

Итак, как мне сгенерировать ключ аутентификации для моего пользователя, т. Е. Когда он входит в систему, как мне добавить токен этому пользователю?

4

Решение

Я отвечаю на это для будущих пользователей, которые приходят сюда, потому что их API отвечает «не аутентифицирован» при попытке использовать их собственный API.

Вопрос ОП: «Итак, как мне сгенерировать ключ аутентификации для моего пользователя, т.е. когда они входят в систему, как мне добавить токен этому пользователю?»

Ответ: Если вы используете свой собственный API через промежуточное ПО CreateFreshAPIToken, вам не нужно генерировать специальный ключ / токен аутентификации. Аутентификация выполняется с помощью файла cookie laravel_token, который добавляется к вашим ответам при добавлении промежуточного программного обеспечения CreateFreshApiToken.

Этот встроенный токен расшифровывается по паспорту при получении запроса с этим cookie.

Для людей, которые все еще получают сообщение «не прошедшее проверку подлинности» после выполнения всех шагов из документов для использования их собственного API:

Вся концепция не будет работать, если Laravel Middleware Illuminate \ Cookie \ Middleware \ EncryptCookies не определен для ваших групп маршрутов.
Эта информация не является предоставлено документами. Это полностью имеет смысл, хотя. Файл cookie не может быть расшифрован, если он никогда не был зашифрован, поэтому в TokenGuard, предоставленном Passport, всегда будет исключение DecryptException.

Это промежуточное ПО по умолчанию настроено для всех запросов, выглядит примерно так в вашем Kernel.php:

class Kernel extends HttpKernel
{
/**
* The application's global HTTP middleware stack.
*
* These middleware are run during every request to your application.
*
* @var array
*/
protected $middleware = [
\Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
\Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
\App\Http\Middleware\TrimStrings::class,
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
];
}

Если это не так, вы должны добавить его.

Надеюсь, я смогу помочь некоторым людям приземлиться здесь после нескольких часов со слезами на глазах.

3

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

Чтобы использовать свой собственный API, с другой средой внешнего интерфейса, вам нужно добавить заголовок запроса к каждому запросу AJAX: установите заголовок X-CSRF-TOKEN равным токену CSRF для этой страницы.

Например: с Javascript

$.ajax({
url: $url,
headers:{'X-CSRF-TOKEN': Laravel.csrfToken},
type: $type,
dataType: $dataType,
async: $async,
data: $data,
});
0

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