2017-08-18 1 views
1

Während des Login-Prozesses von Laravel Spark muss ich ein Token einer Remote-API anfordern. Diese API speichert genau die gleichen Benutzer und Passwörter wie die Spark-Anwendung von Laravel. Daher muss ich den Benutzernamen und das nicht gehashte Passwort des Benutzers während der Authentifizierung erhalten.Kann Laravel Spark-Authentifizierung mit eigener Implementierung nicht überschreiben

Ich dachte, das Überschreiben der authentifizierten Methode wäre die Lösung für mein Problem. In Routen/web.php ich die POST /login Endpunkt außer Kraft setzen und am Zeige diesen Endpunkt zu meinem eigenen LoginController:

<?php 

namespace App\Http\Controllers\Auth; 

use Illuminate\Support\Facades\Log; 
use Illuminate\Http\Request; 
use Laravel\Spark\Http\Controllers\Auth\LoginController as SparkLoginController; 

class LoginController extends SparkLoginController 
{ 
    /** 
    * Create a new login controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     parent::__construct(); 
    } 

    /** 
    * Handle a successful authentication attempt. 
    * 
    * @param Request $request 
    * @param \Illuminate\Contracts\Auth\Authenticatable $user 
    * @return Response 
    */ 
    public function authenticated(Request $request, $user) 
    { 
     Log::info('authenticated method in LoginController has been called'); 

     return parent::authenticated($request, $user); 
    } 
} 

Implementierung löst eine Missing argument 2 for App\Http\Controllers\Auth\LoginController::authenticated() Ausnahme. Irgendwie gibt Laravel keinen Benutzer im Parameter $ user weiter. Diese Ausnahme wird ausgelöst, egal was ich mache. Selbst wenn ich die Methode aus meinem LoginController entferne, wird dieselbe Ausnahme im Spark LoginController ausgelöst.

Wenn ich meine /login Endpunkt deaktivieren und melden Sie sich die $ Anfrage und $ Benutzerparameter des authentifizierten Methode in die Spark LoginController, sehe ich, dass $ Anfrage enthält Illuminate\Http\Request::__set_state(array(...)) und $ user enthält App\User::__set_state(array()). Wenn ich das gleiche in meinem eigenen Controller $ Anfrage protokolliert enthält Illuminate\Http\Request::__set_state(array(...)) und $ Benutzer ist nicht bestanden.

Antwort

1

Es stellte sich heraus, dass meine POST /login Route nicht die richtige Funktion aufgerufen hat. Es rief Auth\[email protected] an und sollte Auth\[email protected] anrufen.

Wie die komplette Route aussehen sollte: Route::post('/login', 'Auth\[email protected]');

dummen Fehler gemacht, aber vielleicht wird es jemand in der Zukunft helfen vor dem gleichen Problem.

Verwandte Themen