2016-01-18 16 views
5

Sto sviluppando un'API RESTful con Laravel 5.2. Nel guardia di token situato a \Illuminate\Auth\TokenGuard\TokenGuard.php sulla linea 46 il nome di colonna per il token è definito come api_token:Laravel 5.2 Autenticazione tramite API

$this->storageKey = 'api_token'; 

voglio cambiare questo nome di colonna a qualcos'altro, ad esempio api_key.

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

+0

perché vuoi cambiarlo? Cosa stai cercando di ottenere – Digitlimit

+0

nella mia tabella, il nome della colonna è 'api_key'. Pertanto, voglio che laravel cerchi la colonna 'api_key' e non la colonna 'api_token' durante la ricerca del token. –

risposta

16

Il TokenGuard integrato non ha un modo per modificare il campo storageKey. Pertanto, è necessario creare la propria classe Guard che imposta il campo e indicare a Auth di utilizzare la classe Guard.

Innanzitutto, iniziare creando una nuova classe Guard che estende la classe TokenGuard di base. In questo esempio, viene creato il 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 creata la vostra classe, è necessario lasciare che Auth sapere. È possibile farlo nel metodo boot() del provider di servizi AuthServiceProvider:

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

E, infine, è necessario dire Auth per utilizzare il nuovo mytoken guardia. Questo viene fatto nel file di configurazione config/auth.php.

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

Grazie mille, questo è utile. –

+1

Grazie @patricus, sono nuovo di questo e non riesco a capire come accettare. poi ho applicato il buon senso e ho fatto clic su un segno di spunta grigio, è diventato verde. Grazie per la risposta elaborata, ha aiutato. –

+0

@patricus come posso definire api_token da un'altra relazione di tabella con le tabelle utente? https://stackoverflow.com/questions/46319639/how-to-change-api-token-column-in-token-guard – Katerou22

1

Purtroppo non c'è modo di configurarlo.

L'unico modo per utilizzare un altro tasto è creare la propria "Protezione": Adding Custom Guards.

È possibile estendere la classe TokenGuard ed eseguire l'override di __constructor con i propri nomi di colonna.