laravel изменяет заголовки перед аутентификацией (на основе токена / API)

У меня есть API, который использует Dingo API. Поэтому текущие пользователи используют заголовок X-Api-Key для аутентификации. Теперь я хочу переключиться на реализованную в laravel систему API, для которой требуется заголовок Authorization.

Можно ли указать laravel, какой заголовок использовать. Или, что предпочтительнее: есть ли хук, который я могу использовать для изменения заголовков (например, скопировать значение заголовка X-Api-Key в заголовок авторизации) до того, как произойдет аутентификация?


person Chris    schedule 11.10.2017    source источник
comment
Вы можете сделать это, используя промежуточное ПО Laravel.   -  person Himanshu Upadhyay    schedule 11.10.2017


Ответы (1)


Вы можете создать промежуточное ПО следующим образом:

<?php

namespace App\Http\Middleware;

use Closure;

class ModifyHeader extends BaseAuthorize
{
    public function handle($request, Closure $next)
    {
        if ($authorization = $request->header('X-Api-Key')) {
            $request->headers->set('Authorization', $authorization);
        }

        return $next($request);
    }
}

Затем вам нужно добавить это промежуточное ПО в $middlewareGroups или $routeMiddleware, например, так:

protected $middlewareGroups = [
    'api' => [
        // ... 
        \App\Http\Middleware\ModifyHeader::class,
    ],
    // ...
 ];

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

Тогда, например, если вы добавите такой маршрут:

Route::group(['middleware' => 'api'], function () {
    Route::get('/test', function () {
        dd(request()->header('Authorization'));

    });
});

Вы должны получить то же значение, которое передается в заголовке X-Api-Key.

person Marcin Nabiałek    schedule 11.10.2017
comment
это в сети или в API middlewareGroups ?? - person Maraboc; 11.10.2017
comment
@Maraboc Вы правы, лучше продемонстрировать это в промежуточном программном обеспечении api для такого использования, хотя это зависит от приложения автора, как именно организованы его группы промежуточного программного обеспечения. - person Marcin Nabiałek; 11.10.2017