2016-01-18 28 views
5

Zajmuję się tworzeniem RESTful API z Laravel 5.2. W token zabezpieczający umieszczony na \Illuminate\Auth\TokenGuard\TokenGuard.php na linii 46 nazwa kolumny dla tokena jest zdefiniowany jako api_token:Laravel 5.2 Uwierzytelnianie przez API

$this->storageKey = 'api_token'; 

Chcę zmienić nazwę kolumny na coś innego, na przykład api_key.

Jak mogę to zrobić? Nie chcę modyfikować podstawowego pliku TokenGuard.php.

+0

dlaczego chcesz to zmienić? Co próbujesz osiągnąć – Digitlimit

+0

w mojej tabeli, nazwa kolumny to "api_key". Dlatego chcę, aby laravel szukał kolumny "api_key", a nie kolumny "api_token" podczas wyszukiwania tokena. –

Odpowiedz

16

Wbudowany TokenGuard nie ma możliwości modyfikacji pola storageKey. Dlatego musisz utworzyć własną klasę Guard, która ustawi pole i powiesz Auth, aby użyć swojej klasy Guard.

Najpierw należy utworzyć nową klasę Guard, która rozszerza klasę podstawową TokenGuard. W tym przykładzie, jest on tworzony na 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'; 
    } 
} 

Po utworzeniu klasy, trzeba pozwolić Auth o tym wiedzieć. Można to zrobić w metodzie boot() dostawcy AuthServiceProvider usług:

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

I wreszcie, trzeba powiedzieć Auth do korzystania z nowego mytoken strażnika. Dokonuje się tego w pliku konfiguracyjnym config/auth.php.

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

Dziękuję bardzo, to jest pomocne. –

+1

Dziękuję @patricus, jestem nowy w tym i nie mogłem dowiedzieć się, jak zaakceptować. następnie zastosowałem zdrowy rozsądek i kliknąłem na szary znacznik wyboru, który stał się zielony. Dziękuję za wyczerpującą odpowiedź, pomogło. –

+0

@patricus jak mogę zdefiniować api_token z innej relacji tabeli z tabelami użytkowników? https://stackoverflow.com/questions/46319639/how-to-change-api-token-column-in-token-guard – Katerou22

1

Niestety nie ma sposobu, aby to skonfigurować.

Jedynym sposobem użycia innego klucza jest utworzenie własnego "Strażnika": Adding Custom Guards.

Możesz rozszerzyć klasę TokenGuard i zastąpić __constructor swoimi własnymi nazwami kolumn.