2017-10-11 4 views
1

Ich habe eine API, die Dingo API verwendet. Die aktuellen Benutzer verwenden daher einen X-Api-Key Header für die Authentifizierung. Ich möchte jetzt zu Laravels implementiert API-System, das eine Authorization Header erfordert.laravel Kopfzeilen vor der Authentifizierung (tokenbasierte/api) ändern

Ist es möglich, Laravel zu sagen, welche Kopfzeile zu verwenden ist. Oder vorzugsweise: Gibt es einen Hook, den ich verwenden kann, um die Header zu ändern (z. B. den X-API-Key-Header-Wert in den Authorization-Header kopieren), bevor Authentifizierung stattfindet?

+0

Sie können dies mit Laravel Middleware tun. –

Antwort

1

Sie können Middleware wie folgt erstellen:

<?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); 
    } 
} 

Dann müssen Sie diese Middleware $ middlewareGroups oder $ routeMiddleware wie dies zum Beispiel hinzuzufügen:

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

und dann sollten Sie sicherstellen, dass Routen, die Sie ändern möchten, sind in api Middleware. Natürlich können Sie auch eine eigene Middleware-Gruppe erstellen oder diese für ausgewählte Routen anwenden.

Dann zum Beispiel, wenn Sie eine solche Route hinzufügen:

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

    }); 
}); 

Sie sollten den gleichen Wert erhalten, die in X-Api-Key Header übergeben wird.

+0

ist es im Web oder der API MiddlewareGroups ?? – Maraboc

+1

@Maraboc Sie haben recht, es ist besser, dies in 'api'-Middleware für eine solche Verwendung zu demonstrieren, obwohl es abhängig von der Autorenanwendung ist, wie genau seine Middleware-Gruppen organisiert sind –