2016-09-14 6 views
3

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

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

Route::group(['middleware' => 'auth:api'], function() { 
    Route::get('classes', '[email protected]'); 
    Route::get('classes/{id}', '[email protected]'); 
    Route::post('classes', '[email protected]'); 
    Route::put('classes', '[email protected]'); 
    Route::delete('classes', '[email protected]'); 
}); 

в моем Http/kernal.php Я добавил,

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

на моем массиве $ middleWareGroups.

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

+2

смотреть это [laracast] (https: // laracasts.com/series/whats-new-in-laravel-5-3/episodes/13) это бесплатно, и все это объяснит, в том числе пример потребления вашего api – tam5

+0

Смотрите, что и до сих пор меня достало. Из моего внешнего интерфейса (а не vue.js), как я отправляю запрос api. откуда я получу маркер или куки? – Udders

+1

Что у вас на фронте? – tam5

ответ

-1

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

Например: С Javascript

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

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

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

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

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

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

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

Это промежуточное ПО по умолчанию настроен для всех запросов, глядя что-то подобное в вашем 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, 
    ]; 
} 

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

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