Holen Sie sich Benutzerdaten mit dem Zugriffstoken in der Laravel-Passport-Client-App

Lesezeit: 7 Minuten

Ich habe erfolgreich erstellt server.app und client.app mit Dokumentation des Laravel-Passes. Alles funktioniert wie erwartet.

client.app-Route:

Route::get('callback', function (Request $request) {
   $http = new GuzzleHttpClient;
   $response = $http->post('http://server.app/oauth/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => 3,
        'client_secret' => 'secret',
        'redirect_uri' => 'http://client.app/callback',
        'code' => $request->code
    ]
   ]);
   return json_decode((string) $response->getBody(), true)['access_token'];
});

Standardmäßig kehrt diese Route zurück Zugangstoken, mit dem ich machen kann, was ich will.

Anfrage:

http://server.app/oauth/authorize?client_id=3&redirect_uri=http%3A%2F%2Fclient.app%2Fcallback&response_type=code&scope=

Kehrt zurück:

http://client.app/callback?code=access_token

Frage:

So stellen Sie die richtige Anfrage an server.app mit gegebenem access_token in client.app zum Beispiel bekommen E-Mail(s) des/der Benutzer(s).

Sollte ich es benutzen: http://server.app/api/user Daten anfordern? Wenn ja, wie kann ich das tun? Wenn möglich, schreiben Sie bitte einen Code.

Danke für alle Antworten.

Holen Sie sich Benutzerdaten mit dem Zugriffstoken in der Laravel Passport Client App
Adamja

Ich bin bei diesem Thema absolut verrückt geworden! Es machte einfach keinen verdammten Sinn, warum es immer wieder die Dummen ausspuckte Unauthenticated Fehler beim Versuch, eine Route wie z /api/user. Nach langem Suchen (VIEL Suchen) fand ich endlich die Antwort. Wenn du diesen Fero von Laracasts siehst, bist du mein Held!

Hast du überprüft appProvidersRouteServiceProvider.php ?

in dem mapApiRoutes() du kannst das einstellen Middleware. überprüfe, ob es auth:api. wenn nicht, ändern Sie es. auch, entfernen Sie die auth
Middleware von der Strecke api.php Datei.

https://laracasts.com/discuss/channels/laravel/laravel-53-passport-api-unauthenticated-in-postman-using-personal-access-tokens

Bearbeiten:

Sobald Sie die Änderung an der vorgenommen haben appProvidersRouteServiceProvider.php oben erwähnt, fahren Sie mit dem folgenden Beispiel fort.

Das Wichtigste zuerst, wir müssen ein frisches holen access_token. Dazu verwende ich die Passwort grant_type (Mehr Info: https://laravel.com/docs/5.4/passport#password-grant-tokens)

Um ein frisches abzurufen access_token, ich habe eine neue Route erstellt auf routes/web.php und nannte es /connect. Ich habe dann den Code aus dem obigen Link eingefügt:

Route::get('connect', function (Request $request) {
    $http = new GuzzleHttpClient;

    $response = $http->post('http://example.com/oauth/token', [
        'form_params' => [
            'grant_type' => 'password',
            'client_id' => $request->client_id,
            'client_secret' => $request->client_secret,
            'username' => $request->username,
            'password' => $request->password,
            'scope' => ''
        ],
    ]);

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

Verwenden von Chrome Postbote, du musst:

  1. Setze die Methode auf GET
  2. Geben Sie die Verbindungs-URL mit den entsprechenden Parametern ein, z http://example.com/connect?client_id=1&client_secret=W2zogh7tiBh2jfHleYuzpViv7dqynDYQ6O07DKLj&[email protected]&password=123456
  3. Drücke den Überschriften Registerkarte (neben Autorisierung), fügen Sie einen Schlüssel von . hinzu Accept und Wert von application/json
  4. Klicken Sie auf die Schaltfläche Senden

Beispielergebnis:

{
  "token_type": "Bearer",
  "expires_in": 31535999,
  "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImE0MmFiYjZkNTQ5M2ZjMGQxYzVmM2E3MDFlOTNjMTRlOTQxMTBmNWQ5NmI1ODI0NTBmMmEyM2MwMzQ5OTMwODdiZGUwYTI5ZDU5N2VjYTExIn0.eyJhdWQiOiIxIiwianRpIjoiYTQyYWJiNmQ1NDkzZmMwZDFjNWYzYTcwMWU5M2MxNGU5NDExMGY1ZDk2YjU4MjQ1MGYyYTIzYzAzNDk5MzA4N2JkZTBhMjlkNTk3ZWNhMTEiLCJpYXQiOjE0OTE0Njg4ODIsIm5iZiI6MTQ5MTQ2ODg4MiwiZXhwIjoxNTIzMDA0ODgxLCJzdWIiOiI3NWNlZDUwMC0xNTQ0LTExZTctOWE4ZS1hZDVmMWFlZTM4OWUiLCJzY29wZXMiOltdfQ.dV3DKDM7IN-oGnZ_Rw10VnYkh9ySlz5i859yO0roZLAYwgmsmEEZK_vpttudUoKmYenqibZQXg6HG4KHRd-cgas_2DpO-7UCkXQYNTriUUAQ4XM6To86EOaf2BW1a07kdVGXTdo_ETQc7heUG0NWQ8-Hrr2NHkSyDULupDs8gDg_fg6xSVsFUEDZB32UIGwquAHT1Y21ZpTdQar0Rag9qOLeZYTR05ro0v9_rQbSoDgJiZE3KT9GbqwU_BegWRmAwY6LmxG4raZpSMgqYEMo3D9D0lJiomOLK4pSjqmi0EVti04zZ6Vg4GHE6S1TgC6IlakV2bMItXTWuZT6T0jEba-3ctaC4K2T8F4P8J6t-99mKY-_zSwgfGm1FErK09qixJlZ4zFsCCT7MgNQVoyu7GkJdTJVlpL1QXLc1QhfrtW11a4gg4Nlja_VyRdB9fZHomgMLpvm_HvSlqEvpeWb8wGkCts9w7ivSNLim-LuFgswGNhTZZqLEbuwB6sJV-l1V0MJCq7_h0yTmLlBdoUkxCaDJJvkUSLk0MUaalAAzY1OCxm-tJcKn31m4yOwf25ZDWf8tWuOTKarEbFyxjB0elkxXQXGe7J7TJAg0tuIEQ8YTL3ExJQ6I7zwtCL83bPOWYRGlJrsX6Lsf0qB-xMVD2DzA3JKDKvZTp5x92kP821",
  "refresh_token": "ArOWW0glHjflLpL4fKOsrNUXT5v91u+CjwcE8LBvH7GJsaM0gWaFe8GH9zXjh8SHew+cg7v1IMiIPLYSVdf7h8oOeV7wgwjChI9YM0Kt6iE4wOXJuy0VwPSCj+danHDuWC3nJWYLrPydTE3h/jgFNjWEPfgXGLfiRWjWQMozddz5EWd4pvUI7J64Lw6cMCg/BslZLHtfN7IWoC1RQGp5K0cGO0QmZfsGMSzsoSUNFjv16BXiKSqlNvs5aGhxErFY4wEOKqBifXUkb3SwnK/iHKg3irmqj4fOf/aKNyCdd/PJCHrRPocrW83oM1sjq7eDufEIlgxmy7uRset8GLAWjx/n6rzkxz2QM0/9Lyc/XN9OL00XBYjA47a1wL55qUUUYWevaFwxWX8LG2UjBf9Vv2lfvLcBBkbgqpalePMDh6wb8IDyJek4BbvZtJ1VZ/l+A9XXY9rQt/hIDdoOAtib8CGr9/CERFIrByZa3TEJBCLAa2FvJSIhHVnKvnuvZX3e9qhTkgHqowJrWg2C3VyPDQYAdIhdpTEvs0pcGSAZWhwXfu9xKQOeyRTEScbLKQmuW+sGbwU+qfdLgh/BR5kW4TMer4TIzWKSuHsqmibgiUwaQkwTrtjH2Xz9Z9XmAbVzJ8pqbEZPe7t5whXDoRSnAwWymdxk2E7SiSsVUA3kX39="
}

Markieren Sie die access_token String und kopieren Sie ihn in einen Texteditor.

Sie müssen dann eine neue Route in erstellen routes/api.php. Die folgende Route gibt einfach die Informationen der aktuellen API-Benutzer aus:

Route::group(['prefix' => 'user'], function() {
    Route::get("https://stackoverflow.com/", function() {
        return response()->json(request()->user());
    });
});

Nachdem Sie die obigen Schritte ausgeführt haben, nehmen Sie diese Änderungen an Postman vor:

  1. Setze die Methode auf GET
  2. Ändern Sie die URL so, dass sie auf die API-Route verweist, dh http://example.com/api/user
  3. Klicken Sie auf Überschriften Tab erneut und fügen Sie einen neuen Schlüssel von . hinzu Authorization und Wert von Bearer access_token_here (ersetzen access_token_here mit dem zuvor kopierten Zugriffstoken)
  4. Klicken Sie auf die Schaltfläche Senden

Beispielausgabe:

{
  "id": "75ced500-1544-11e7-9a8e-ad5f1aee389e",
  "name": "test test",
  "email": "[email protected]",
  "created_at": "2017-03-30 23:29:03",
  "updated_at": "2017-03-30 23:29:03"
}

  • In meinem Fall habe ich jedem Benutzer ein persönliches Zugriffstoken gegeben … haben Sie Ihre Lösung getestet und funktioniert sie?

    – Tauras

    6. Apr. ’17 um 8:08

  • Habe es gründlich getestet und es funktioniert zu 100%. Konnte nicht glauben, dass ein einfacher Tausch auf der Middleware von api zu auth:api auf der RouteServiceProvider.php war alles, was benötigt wurde. Möchten Sie, dass ich auch mit Chrome Postman eine vollständig detaillierte Schritt-für-Schritt-Anleitung hinzufüge, damit Sie alles sehen können?

    – adamja

    6. Apr. ’17 um 8:11


  • Los geht’s, Kumpel! Ich denke, das sollte in Zukunft einigen Leuten helfen.

    – adamja

    6. Apr. ’17 um 9:09

  • Perfekt. Danke. Hoffe, jeder andere wird dies nützlich finden. Akzeptiert.

    – Tauras

    6. Apr. ’17 um 9:35

  • Tage vergingen! Du bist ein Rettermann! Jetzt habe ich einen klaren Überblick, wie es gemacht wird!

    – Kaninchen-Bit

    16. Mai ’17 um 13:51

Haben Sie versucht, es in der POSTMAN Chrome-App auszuführen? Wenn nicht, laden Sie es herunter. https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=de

Füllen Sie die Informationen aus.
Bildbeschreibung hier eingeben

Nachdem Sie die Daten erfolgreich generiert haben, klicken Sie oben rechts auf die Schaltfläche CODE (ich habe sie grün hervorgehoben).

Wählen Sie zuletzt Ihre Sprache aus und kopieren Sie den Code. Für PHP habe ich php cURL ausgewählt.

Hoffe, es funktioniert.

Holen Sie sich Benutzerdaten mit dem Zugriffstoken in der Laravel Passport Client App
shukshin.ivan

Laut Laravel Dokumentation, sollten Sie eine Route zur Server-App hinzufügen (routes/api.php): $response->getBody();

Route::get('/user', function () {
    // authenticated user. Use User::find() to get the user from db by id
    return app()->request()->user();
})->middleware('auth:api');

Anfrage per Quiz stellen:

$response = $client->request('GET', '/api/user', [
    'headers' => [
        'Accept' => 'application/json',
        'Authorization' => 'Bearer '.$accessToken,
    ],
]);
echo $response->getBody();

  • Was haben Sie im Antworttext erhalten?

    – shukshin.ivan

    20. Januar ’17 um 11:44

  • Client error: `GET http://server.app/api/user` resulted in a `401 Unauthorized` response: {"error":"Unauthenticated."} . Ich verwende das richtige Zugriffstoken.

    – Tauras

    20. Januar ’17 um 12:19

  • Außerdem habe ich verwendet $response = $client->get('http://server.app/api/user' ... und $client wie new GuzzleHttpClient;

    – Tauras

    20. Januar ’17 um 12:21

  • Jetzt gibt es: Server error: `GET http://server.app/api/user` resulted in a `500 Internal Server Error` response: <!DOCTYPE html>. Ich weiß, wegen return json_decode((string) $response->getBody(), true)['access_token'];

    – Tauras

    20. Januar ’17 um 12:52

  • richtig access_token gibt 500 Fehler zurück, nicht korrekt, gibt zurück Unauthenticated.

    – Tauras

    20. Januar 17 um 13:00

Ich hatte das gleiche Problem und habe alle genannten Lösungen ausprobiert, aber es bleibt gleich. Habe so viele Tutorials und Websites gelesen, aber keine Lösung gefunden. Endlich, hab die lösung: Ich verwende Laravel 8 und es hat zwei Pakete für die API-Anfrage deklariert, eines als Reisepass und das andere als Heiligtum. Standardmäßig in User Modell, das es verwendet use LaravelSanctumHasApiTokens; für API-Token. Wenn du benutzt Sanctum Paket ist ok. Wenn Sie es nicht verwenden (Wenn Sie einen Reisepass verwenden), ändern Sie die Linie von Sanctum zu Passport as use LaravelPassportHasApiTokens;

Bildbeschreibung hier eingeben

.

291430cookie-checkHolen Sie sich Benutzerdaten mit dem Zugriffstoken in der Laravel-Passport-Client-App

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy