Laravel использует веб-аутентификацию во всех перенаправлениях API на дом - PullRequest
0 голосов
/ 04 сентября 2018

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

Route::group(['middleware' => ['auth:web'], 'prefix' => 'v1',], function ($router) {
   Route::apiResource('subscriptions', 'Api\SubscriptionController');
   Route::post('subscriptions/{id}/resend', 'Api\SubscriptionController@resend')->name('resend');
   Route::post('subscriptions/{id}/grace', 'Api\SubscriptionController@addGrace')->name('grace');
   Route::apiResource('accounts', 'Api\SocialMediaAccountController');
   Route::post('accounts/{id}/reset', 'Api\SocialMediaAccountController@reset');
Route::apiResource('customers', 'Api\CustomerController');
});

Когда я уже вошел в систему и попытался сделать запрос к API-маршруту, он перенаправил меня на домашнюю страницу. Как я могу это исправить ?

Вот конфиг / auth.php

 'defaults' => [
    'guard' => 'web',
    'passwords' => 'users',
],
'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],

    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],
'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],

    // 'users' => [
    //     'driver' => 'database',
    //     'table' => 'users',
    // ],
],

Я не хочу, чтобы маршруты API перенаправлялись, если я уже вошел в систему. Я просто хочу выполнить веб-авторизацию и продолжить с тем же запросом.

Ответы [ 2 ]

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

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

  1. Обновление промежуточного программного обеспечения с api до web.
# File: app/Providers/RouteServiceProvider.php

protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('web') # <-- CHANGE to 'web'
             ->namespace($this->namespace."\\API")
             ->group(base_path('routes/api.php'));

    }
  1. Обновление промежуточного программного обеспечения с auth:api до auth:web (или просто auth)
# routes/api.php
Route::middleware('auth:web')->get('/user', function (Request $request) {
     return $request->user();
});
0 голосов
/ 04 сентября 2018

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

Вы можете увидеть различия между группами промежуточного программного обеспечения в app / Http / Kernel.php:

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\Session\Middleware\AuthenticateSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],

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

Вы можете настроить свои маршруты на использование группы 'web' или узнать, как использовать собственный API через Javascript: https://laravel.com/docs/5.6/passport#consuming-your-api-with-javascript.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...