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



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

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

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

<?php
namespace AppHttpMiddleware;
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' => [
// ... 
AppHttpMiddlewareModifyHeader::class,
],
// ...
];

然后您应该确保要进行更改的路由位于api中间件中。当然,您也可以为此创建自定义中间件组,或者将其应用于选定的路由。

例如,如果您添加这样的路线:

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

您应该得到与X-Api-Key标头中传递的值相同的值。

最新更新