webentwicklung-frage-antwort-db.com.de

Reisepass - "Nicht authentifiziert." - Laravel 5.3

Ich hoffe, jemand könnte erklären, warum ich unauthenticated bin, wenn bereits ein Oauth 2-Authentifizierungsprozess erfolgreich durchgeführt wurde.

Ich habe das Paket Passport wie in der Dokumentation von Laravel eingerichtet. Ich werde erfolgreich authentifiziert, erhält einen Tokenwert und so weiter. Wenn ich jedoch versuche, eine get-Anfrage auszuführen, sagen wir /api/user, erhalte ich eine Unauthenticated-Fehlermeldung als Antwort. Ich benutze den Tokenwert als Header mit dem Schlüsselnamen Authorization, genau wie in den Dokumenten beschrieben.

Route::get('/user', function (Request $request) {
    return $request->user();
})->middleware("auth:api");

Diese Funktion soll sich als authentifizierter Benutzer zurückgeben, aber ich erhalte nur Unauthenticated. Wenn ich nur den ersten Benutzer zurückschicke, erhalte ich wieder Unauthenticated.

Route::get('/test', function(Request $request) {
    return App\User::whereId(1)->first();
})->middleware("auth:api");

In einem Tutorial von Laracast, das durch das Setup von Passport geführt wird, hat der Guider nicht die ->middleware("auth:api") in seinen Routen. Wenn dies nicht der Fall ist, ist überhaupt keine Authentifizierung erforderlich!

Bitte, Anregungen oder Antworten sind mehr als willkommen!

13
Rikard Olsson

Sie müssen ein Ablaufdatum für die von Ihnen generierten Token festlegen. 

stellen Sie die Startmethode in Ihrem AuthServiceProvider auf den Code unten ein und versuchen Sie, ein neues Token zu generieren. Der Standardablauf der Pässe gibt eine negative Zahl zurück

public function boot()
{
  $this->registerPolicies();
   Passport::routes();
   Passport::tokensExpireIn(Carbon::now()->addDays(15));
   Passport::refreshTokensExpireIn(Carbon::now()->addDays(30));
}
5
Ossaija D

Überprüfen Sie Ihr Benutzermodell und die Datenbanktabelle. Wenn Sie den Namen des primären ID-Felds geändert haben, um etwas anderes als "id" oder sogar "user_id" anzugeben, könnten Sie auf Probleme stoßen. Ich habe ein Problem mit dem Ändern des primären ID-Felds in meinem Benutzermodell und meiner Datenbanktabelle behoben, um "acct_id" zu sagen, anstatt es als "id" zu behalten. Das Ergebnis war "Unauthentifiziert", als ich versuchte, das Benutzerobjekt über GET/user abzurufen durch die auth: API-Middleware. Denken Sie daran, dass ich alle anderen Fixes unter der Sonne ausprobiert hatte, bis ich beschloss, sie selbst zu debuggen. 

ALSO Aktualisieren Sie Ihren Reisepass. Da in den letzten Wochen einige Änderungen vorgenommen wurden.

Ich werde meine Referenz unten verlinken, sie ist sehr detailliert und genau definiert, was ich getan habe und wie ich zur Lösung gekommen bin. 

Genießen!

https://github.com/laravel/passport/issues/151

2
Andre F.

Ich hatte diesen Fehler, weil ich Passport-MySQL-Tabellen (php artisan migrate:fresh) gelöscht habe, php artisan passport:install hilft mir. Denken Sie daran, dass Sie nach dem Entfernen von Tabellen den Pass erneut installieren müssen!

Ich hatte genau den gleichen Fehler, weil ich vergessen habe, http vor dem Projektnamen zu setzen.

use Illuminate\Http\Request;

Route::get('/', function () {
    $query = http_build_query([
        'client_id' => 3,
        'redirect_uri' => 'http://consumer.dev/callback',
        'response_type' => 'code',
        'scope' => '',
    ]);

    // The redirect URL should start with http://
    return redirect('passport.dev/oauth/authorize?'.$query);
});

Route::get('/callback', function (Request $request) {
    $http = new GuzzleHttp\Client;

    $response = $http->post('http://passport.dev/oauth/token', [
        'form_params' => [
            'grant_type' => 'authorization_code',
            'client_id' => 3,
            'client_secret' => 'M8y4u77AFmHyYp4clJrYTWdkbua1ftPEUbciW8aq',
            'redirect_uri' => 'http://consumer.dev/callback',
            'code' => $request->code,
        ],
    ]);

    return json_decode((string) $response->getBody(), true);
});
0
confm