2017-10-11 71 views
1

我有一个使用Dingo API的api。因此,当前用户使用标头进行认证。我现在想切换到laravels实现的API系统,它需要一个Authorization标头。laravel在进行身份验证之前修改头(基于令牌的/ api)

是否可以告诉laravel使用哪个头文件。 或者最好是: 在验证发生之前,我是否可以使用一个钩子来修改头文件(例如,将X-Api-Key头文件的值复制到Authorization头文件中)?

+0

您可以使用Laravel的中间件来做到这一点。 –

回答

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

+0

它是在web还是api中间件组? – Maraboc

+1

@Maraboc你是对的,最好在'api'中间件中演示这种用法,尽管它取决于作者应用程序他的中间件组是如何组织的 –