2016-01-18 3 views
5

Ich bin eine RESTful API mit Laravel 5.2 zu entwickeln. In der Wache Token \Illuminate\Auth\TokenGuard\TokenGuard.php auf Linie 46 der Spaltenname für das Token als api_token definiert:Laravel 5.2 Authentifizierung über API

$this->storageKey = 'api_token'; 

Ich mag diesen Spalt Namen auf etwas anderem ändern, zum Beispiel api_key.

Wie kann ich das tun? Ich möchte die Kerndatei TokenGuard.php nicht ändern.

+0

warum tun Sie das ändern wollen? Was versuchen Sie zu erreichen – Digitlimit

+0

in meiner Tabelle ist der Name der Spalte 'api_key'. Daher möchte ich, dass Laravel bei der Suche nach dem Token nach der Spalte "api_key" und nicht nach der Spalte "api_token" sucht. –

Antwort

16

Das eingebaute TokenGuard hat keine Möglichkeit, das Feld storageKey zu ändern. Deshalb müssen Sie Ihre eigene Guard Klasse erstellen, die das Feld einstellt, und sagen Auth Ihre Guard Klasse zu verwenden.

Beginnen Sie zunächst mit der Erstellung einer neuen Guard-Klasse, die die Basisklasse TokenGuard erweitert. In diesem Beispiel ist es bei app/Services/Auth/MyTokenGuard.php erstellt:

namespace App\Services\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Auth\TokenGuard; 
use Illuminate\Contracts\Auth\UserProvider; 

class MyTokenGuard extends TokenGuard 
{ 
    public function __construct(UserProvider $provider, Request $request) 
    { 
     parent::__construct($provider, $request); 
     $this->inputKey = 'api_key'; // if you want to rename this, as well 
     $this->storageKey = 'api_key'; 
    } 
} 

Sobald Sie Ihre Klasse erstellt haben, müssen Sie Auth darüber wissen lassen. Sie können dies in der boot() Methode auf Ihrem AuthServiceProvider Dienstleisters:

public function boot(GateContract $gate) 
{ 
    $this->registerPolicies($gate); 

    Auth::extend('mytoken', function($app, $name, array $config) { 
     return new \App\Services\Auth\MyTokenGuard(Auth::createUserProvider($config['provider']), $app['request']); 
    }); 
} 

Und schließlich müssen Sie Auth sagen, Ihre neue mytoken Wache zu verwenden. Dies geschieht in der Konfigurationsdatei config/auth.php.

'guards' => [ 
    'api' => [ 
     'driver' => 'mytoken', 
     'provider' => 'users', 
    ], 
], 
+1

Vielen Dank, das ist hilfreich. –

+1

Vielen Dank @patricus, ich bin neu und konnte nicht herausfinden, wie man akzeptiert. dann wandte ich den gesunden Menschenverstand an und klickte auf das graue Häkchen, es wurde grün. Danke für die ausgearbeitete Antwort, es hat geholfen. –

+0

@patricus Wie kann ich api_token aus einer anderen Tabellenrelation mit Benutzertabellen definieren? https://stackoverflow.com/questions/46319639/how-to-change-api-token-column-in-token-guard – Katerou22

1

Leider gibt es keine Möglichkeit, das zu konfigurieren.

Der einzige Weg, um einen anderen Schlüssel zu verwenden ist Ihre eigene „Garde“ zu erstellen: Adding Custom Guards.

Sie können die Klasse TokenGuard erweitern und die __constructor mit Ihren eigenen Spaltennamen überschreiben.