laravel在进行身份验证之前修改标头(基于令牌/ api)

时间:2017-10-11 17:54:23

标签: php laravel laravel-5 authorization laravel-middleware

我有一个使用Dingo API的api。因此,当前用户使用a 用于身份验证的X-Api-Key标头。我现在想切换到laravels实现的API系统,该系统需要Authorization标题。

是否可以告诉laravel使用哪个标头。 或者最好: 在进行身份验证之前,是否有可用于修改标头的挂钩(例如,将X-Api-Key标头值复制到Authorization标头中)?

1 个答案:

答案 0 :(得分:2)

您可以像这样创建中间件:

<?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标题中传递的值相同的值。