2016-05-25 23 views
10

Próbuję uzyskać działający system multi-auth, w którym Użytkownicy mogą logować się za pośrednictwem normalnego portalu internetowego, ale osobną bazę danych podmiotów (na przykład "roboty")) może również zalogować się za pomocą sterownika tokena straży API. Ale bez względu na to, co robię, konfiguracja, którą mam, nie kieruje mojego zabezpieczenia uwierzytelniającego do poprawnej bazy danych Robota i nadal próbuje uwierzytelnić te żądania jako Użytkownicy za pomocą tokenów (które zawodzą, ponieważ użytkownicy nie mają tokenów).Laravel 5.2 Multi-Auth z ochroną API używa niewłaściwej tabeli

Czy ktoś może mi pomóc znaleźć miejsce, w którym popełniłem błąd?

zacząłem poprzez umieszczenie razem grupę middleware w Kernel.php:

'api' => [ 
    'throttle:60,1', 
     'auth:api', 
], 

używa ustawienia w config/auth.php

'guards' => [ 
     'web' => [ 
      'driver' => 'session', 
      'provider' => 'users', 
     ], 

     'api' => [ 
      'driver' => 'token', 
      'provider' => 'robots', 
     ], 
    ], 

'providers' => [ 
    'users' => [ 
     'driver' => 'eloquent', 
     'model' => App\User::class, 
    ], 

    'robots' => [ 
     'driver' => 'eloquent', 
     'model' => App\Models\Robot::class, 
    ], 
], 

Middleware jest wywoływana w routes.php

Route::group(['middleware' => 'api'], function() { 
    Route::get('api/request', 'API\[email protected]'); 
}); 

używa tego modelu:

<?php 

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 
use Illuminate\Contracts\Auth\Authenticatable; 

class Robots extends Authenticatable 
{ 
    protected $fillable = [ 
     'serial_number','api_token', 
    ]; 
    protected $guard = 'Robots'; 

    protected $hidden = [ 
     'api_token', 
    ]; 
} 

Jakieś pomysły?

Aktualizacja: na dalszej kontroli, wydaje się, że większość ustawień auth.php nie stosują prawidłowo - czy istnieje jakiś sposób mogę zmusić te ustawienia odniosły skutek?

+0

Korzystanie z usługi internetowej? –

+0

Co masz na myśli? Nie używam oprogramowania pośredniczącego do stron WWW, ponieważ spowoduje to zgłoszenie wyjątku tokena dla wywołań API. – Luciasar

+0

jeśli używasz API, to przepuść api_token w nagłówku –

Odpowiedz

4

faktycznego wydania/rozwiązania:

laravel posiada osobne, rzadko wspomina pamięć podręczną, która istnieje wyłącznie dla swoich plików konfiguracyjnych. Normalne metody buforowania i resetowania klas, takie jak composer dump-autoload i php artisan cache:clear, nie mają wpływu na tę pamięć podręczną, co doprowadziło do mojego mylącego stanu, gdy żadne z ustawień w moim pliku auth.php nie zaczęło działać.

Poprawny sposób, aby usunąć ten cache jest użycie polecenia:

php artisan config:cache

php artisan config:clear

Są rozwiązany mój problem.

3

W pliku config/auth.php należy podać model, który ma być używany dla dostawcy robotów: 'model' => App\Models\Robot::class Jednak klasa Robot jest zdefiniowana jako class Robots extends Authenticatable, co jest niezgodne z nazwą klasy.

Zmień nazwę klasy do class Robot

+0

Wymagane jest uwierzytelnienie, aby klasa mogła używać sterownika Token, jak sądzę. Ponadto, dlaczego składnia rozszerzenia zmieniłaby nazwę klasy? – Luciasar

+0

Twoje imię i nazwisko to Roboty (liczba mnoga). Zmień nazwę na Robot (pojedynczy). – henrik

+0

Rozumiem. To jest dobry haczyk, ale w rzeczywistości nie był to problem, który miałem (patrz poniżej). Dam ci nagrodę za nagrodę, dzięki za obejrzenie tego! – Luciasar