webentwicklung-frage-antwort-db.com.de

Laravel Pass-Route leitet zur Anmeldeseite weiter

Ich verwende Laravel 5.3 & Reisepass.

Wenn Sie Postman zum Testen einer Route verwenden, die ich in der Datei api.php festgelegt habe, wird immer die Anmeldeseite zurückgegeben. Hier ist ein Beispiel meiner Teststrecke:

Route::get('/getKey', function() {
    return 'hello';
})->middleware('client_credentials');

Postman Params:

Accept application/json
Authorization Bearer <then my key>

Ich habe Middleware auf "auth: api" für eine andere Lösung gesetzt, die ich bei der Suche nach der Antwort gefunden habe.

protected function mapApiRoutes()
    {
        Route::prefix('api')
             ->middleware('auth:api')
             ->namespace($this->namespace)
             ->group(base_path('routes/api.php'));
    }

Ich habe fast jede Lösung ausprobiert, die für andere funktioniert hat, aber immer noch kein Glück. Anregungen wären sehr dankbar.

UPDATESo endlich habe ich etwas zu arbeiten. Ich habe eine Consumer-App erstellt und einige Testfunktionen erstellt. Ich konnte die API mit der Überprüfung des Tokens verbrauchen. Wenn Sie auf diese Route klicken, wird jedoch keine Anmeldeseite mehr angezeigt, sondern es wird jetzt nichts mehr zurückgegeben. Also funktioniert es immer noch aus irgendeinem Grund nicht.

Route::get('/user', function (Request $request) {

    return $request->user();
})->middleware('client_credentials');
8
Keith

Die Umleitung zur definierten Login-Route erfolgt in der App\Exceptions\Handler.php-Klasse. 

protected function unauthenticated($request, AuthenticationException $exception)
{
    if ($request->expectsJson()) {
        return response()->json(['error' => 'Unauthenticated.'], 401);
    }

    return redirect()->guest(route('login'));
}

Die Funktion versucht zu ermitteln, ob sie von einer API aus aufgerufen wird (in diesem Fall gibt sie eine nicht autorisierte Antwort mit JSON-Nachricht zurück), und wenn nicht, wird sie entsprechend den Kommentaren zur Anmeldeseite umgeleitet

Konvertiert eine Authentifizierungsausnahme in eine nicht authentifizierte Antwort

Um das Problem beim Postboten zu beheben, klicken Sie in der Anforderung auf die Registerkarte Kopfzeilen und fügen Sie Folgendes hinzu:

key:   Accept
value: application/json

Ich bin ziemlich neu in diesem Bereich, daher bin ich mir nicht sicher, ob dies ein Header ist, den wir hinzufügen sollten, wenn alle API-Aufrufe mit Postman getestet werden, oder nur, wenn Sie wissen, wie diese Laravel-Methode eingerichtet wird.

Auf jeden Fall würde das Problem dadurch gelöst, dass Sie auf die Anmeldeseite umgeleitet werden. Es ist jedoch ein Zeichen dafür, dass die zugrunde liegende Authentifizierung nicht funktioniert

20
madz

Fügen Sie diesen Code in den Kopfzeilen des Postboten hinzu.

key           Value
Accept        application/json
3

Es wird geprüft, ob die Anforderung von Ajax stammt. In diesem Fall erhalten Sie den folgenden Json, wenn die Authentifizierung fehlschlägt:

{
"error": "Unauthenticated."
}

Andernfalls wird davon ausgegangen, dass Sie einen Browser verwenden, und es wird zur Authentifizierung auf die Html-Anmeldeseite umgeleitet.

Sie können Ihrer Anfrage den folgenden Header hinzufügen, um eine Ajax-Anfrage zu simulieren:

X-Requested-With = XMLHttpRequest
3
wmac

Sie müssen Authorization: Bearer YOUR_TOKEN zum Header jeder Anforderung hinzufügen. Für die neueste Version Laravel 5.5 oder höher. Sie müssen auch Accept: application/json hinzufügen, um den Header anzufordern.

1
Edwin Wong

wenn Sie username anstelle von email für den Berechtigungsnachweis verwenden; Fügen Sie diese Methode in Ihr User-Modell ein:

function findForPassport($username) {
     return $this->where('username', $username)->first();
}

Hier liegt das Problem, aus dieser Codezeile

  protected function mapApiRoutes()
{
    Route::prefix('api')
         ->middleware('auth:api')
         ->namespace($this->namespace)
         ->group(base_path('routes/api.php'));
}

augenmarkierung

->middleware('auth:api')

Die Middleware "auth: api" hat das Schlüsselwort AUTH === authentifizierter Benutzer. Was also passiert, sind alle Anforderungen unter dieser Middleware, auch diejenigen, die keinen authentifizierten Benutzer benötigen

Wenn der Postbote eine Anfrage an Routen unter auth: api stellt, wird diese zuerst zur Authentifizierung auf die Anmeldeseite umgeleitet (um sich zuerst anzumelden).

Ich empfehle daher die Verwendung der auth: api-Middleware für Routen, für die ein authentifizierter Benutzer gemäß Ihren Designs und der Sicherheit Ihrer App erforderlich ist

Falls Sie "auth: api" auf Ihrer Http/kernel.php-Datei unter "Gefällt mir" haben

 'api' => [
        'throttle:60,1',
        'bindings',
        'auth:api"

    ],

Und Sie haben SPA entworfen und alle Routen befinden sich auf routes/api.php. Selbst wenn Sie eine Login-/Anmeldeseite erreichen, benötigen Sie einen authentifizierten Benutzer, der ungerade ist.

Fügen Sie daher gegebenenfalls die Middleware 'auth: api' hinzu.

0
mwangaben