Laravel 5.2 Autenticazione tramite API

Sto sviluppando un'API RESTful con Laravel 5.2. Nella protezione token situata in \Illuminate\Auth\TokenGuard\TokenGuard.php sulla row 46 il nome della colonna per il token è definito come api_token :

 $this->storageKey = 'api_token'; 

Voglio cambiare il nome di questa colonna in qualcos'altro, ad esempio api_key .

Come posso fare questo? Non voglio modificare il file principale di TokenGuard.php .

Il TokenGuard non ha un modo per modificare il field storageKey . Pertanto, dovrai creare la tua class Guard che imposta il field e dire a Auth di usare la tua class Guard .

Innanzitutto, inizia creando una nuova class Guard che estenda la class base TokenGuard . In questo esempio, viene creato in app/Services/Auth/MyTokenGuard.php :

 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'; } } 

Una volta che hai creato la tua class, devi farla conoscere a Auth . Puoi farlo nel metodo boot() sul tuo provider di servizi AuthServiceProvider :

 public function boot(GateContract $gate) { $this->registerPolicies($gate); Auth::extend('mytoken', function($app, $name, arrays $config) { return new \App\Services\Auth\MyTokenGuard(Auth::createUserProvider($config['provider']), $app['request']); }); } 

E infine, devi dire a Auth di usare la tua nuova guardia di mytoken . Questo è fatto nel file config/auth.php configuration.

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

Sfortunatamente non c'è modo di configurarlo.

L'unico modo per usare un'altra chiave è creare la tua "Guard": aggiungere guardie personalizzate .

È ansible estendere la class TokenGuard e sovrascrivere __constructor con i propri nomi di colonna.