webentwicklung-frage-antwort-db.com.de

Laravel Passport Print Persönliches Zugangs-Token

Ich verwende das Reisepasspaket von Laravel, um meine restliche API mit Token zu authentifizieren. Im Moment verwende ich persönliches Zugriffstoken concept, um das Zugriffstoken zu generieren.

Um ein Zugriffstoken für einen einzelnen Benutzer zu generieren, verwende ich den folgenden Code, um ein Token mit dem Namen ' Android ' zu generieren.

    $user = User::create([
                'name' => $data['name'],
                'email' => $data['email'],
                'password' => bcrypt($data['password']),
            ]);

    // Here the access token will be stored in $token variable.
    $token = $user->createToken('Android')->accessToken;

    // Now the $token value would be something like
   //eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImMyNjI3YzU0YjFhNWIxZTFlMTdkODhmZTk1NzhjNzAzY2QyMTU0MzhlOD...

Später möchte ich das persönliche Zugriffstoken in meinem Admin-Dashboard anzeigen, bei dem ich Schwierigkeiten habe, das generierte Token wieder zu erhalten. Versuchte unter Code, konnte jedoch kein Zugriffstoken erhalten.

$user = User::find(1)
dd($user->tokens())

Ich habe auch versucht, Pass-Vue-Elemente zu verwenden, aber es wird nur der Name des Zugriffstokens angezeigt, nicht der eigentliche Token.

<passport-personal-access-tokens></passport-personal-access-tokens>

Bitte helfen Sie mir, das Problem zu lösen.

Vielen Dank

9
Minion

Sie können den folgenden Code ausprobieren:

    $user->tokens->load('client')->filter(function ($token) {
        return ! $token->client->firstParty() && ! $token->revoked;
    })->values();
2
Denis Kovacevic

Ich denke, Sie sollten das Token vor oder gleichzeitig mit dem Erstellen eines Benutzers generieren und in der Datenbank speichern:

Fügen Sie die Spalte hinzu:

$table->string('token', 60)->unique();

Speichern Sie das Token:

$token = $user->createToken('Android')->accessToken;

$user = User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => bcrypt($data['password']),
    'token' => $token,
]);

Dann wird es verfügbar sein als:

$user->token;
2
Serg Chernata

ich habe ein ähnliches Problem mit Laravel & Vue Js. Ich habe mein Middleware-Handler aktualisiert, um Zugriff auf das Berechtigungs-Token zu ermöglichen. es funktioniert für mich. Irgendwann wird es helfen Laravel Passport 401 Nicht autorisierter Fehler bei der Verwendung von Apache und Vue

2
channasmcs

Ich hatte das gleiche Problem und es war komisch, dass es so schwierig war, das Token abzurufen, das der Client verwenden sollte. Ich fühlte mich auch komisch, das Token in der Datenbank zu speichern. Ich dachte, dass ich Daten auf eine Art dupliziere. 

Nach vielen Nachforschungen habe ich ein Trait verfeinert und jetzt kann ich genau das haben. 

Überprüfen Sie diese Gist es kann auch Ihr Problem lösen.

0
George D.

Das war meine Lösung.

Ich habe eine konfigurierte Passportmigration erstellt, um den Client zu installieren und die Namensspalte in der Tabelle oauth_access_tokens in Langtext zu ändern, damit ich das Zugriffstoken darin speichern kann.

public function up()
{
    /*
     * This command will create the encryption keys needed to generate secure access tokens.
     * In addition, the command will create "personal access" and "password grant"
     * clients which will be used to generate access tokens
     */
    Artisan::call( 'passport:install', array('-n' => true) );

    // Set the type to LONGTEXT so we can store the access token in it
    Schema::table( 'oauth_access_tokens', function ($table) {

        $table->string( 'name', 4294967295 )->change();
    });
}

Dann fügte ich meinem Benutzermodell die folgende Methode hinzu.

/**
 * Get the users api access token.
 */
public function getAccessToken() {

    $existingToken = $this->tokens()->where( 'revoked', false )->first();

    if ( $existingToken ) {

        return $existingToken->name;
    }

    $accessToken = $this->createToken( $this->uuid )->accessToken;

    // save the access_token so we can recycle it.
    $this->tokens()->where( 'revoked', false )->update( [
        'name' => $accessToken,
    ] );

    return $accessToken;
}

in meinem Transformator kann ich es dann aufrufen, um das Zugriffstoken der Benutzer abzurufen oder eines zu erstellen.

/**
 * A Fractal transformer.
 *
 * @param User $user
 * @return array
 */
public function transform(User $user) {

    return [
        'access_token' => $user->getAccessToken(),
    ];
}
0
Vince Lowe

Ich habe auch das gleiche Problem konfrontiert. Und ich habe es mit einem Befehl gelöst, der hier in Laravel-Dokumentation beschrieben ist. Gehen Sie einfach zu php project und erstellen Sie einen Client für den Reisepass, öffnen Sie Ihr Terminal oder Cmd und führen Sie den Befehl php artisan passport:install Aus.

0
Ziaur Rahman