web-dev-qa-db-fra.com

Laravel Jeton d'accès personnel Passport Print

J'utilise le paquet de passeport de Laravel pour fournir une authentification basée sur un jeton à mon api repos. En ce moment, j'utilise jeton d'accès personnel concept pour générer le jeton d'accès.

Pour générer un jeton d'accès pour un seul utilisateur, j'utilise le code ci-dessous pour générer un jeton nommé 'Android'.

    $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...

Par la suite, je souhaite afficher le jeton d'accès personnel sur mon tableau de bord d'administration, problème auquel il est difficile de récupérer le jeton généré. J'ai essayé sous le code, mais je n'ai pas pu obtenir le jeton d'accès.

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

J'ai également essayé d'utiliser des éléments "passport vue", mais ils affichent uniquement le nom du jeton d'accès, pas le jeton réel.

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

S'il vous plaît, aidez-moi à résoudre ce problème.

Je vous remercie

9
Minion

Vous pouvez essayer le code suivant:

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

Je pense que vous devriez simplement générer le jeton avant ou en même temps que vous créez un utilisateur et le stocker dans la base de données:

Ajouter la colonne:

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

Enregistrez le jeton:

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

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

Ensuite, il sera disponible en tant que:

$user->token;
2
Serg Chernata

j'ai un problème similaire avec laravel & vue js. J'ai mis à jour mon gestionnaire de middleware permettant d'accéder au jeton d'autorisation. ça fonctionne trouver pour moi. quelque temps, ce sera une aide Laravel Erreur non autorisée Passport 401 avec Apache et Vue

2
channasmcs

J'ai eu le même problème et c'était bizarre qu'il soit si difficile de récupérer le jeton que le client devrait utiliser. Je me sentais également bizarre de stocker le jeton dans la base de données, je pensais que je dupliquais des données d'une manière. 

Ainsi, après de nombreuses recherches, j'ai peaufiné un trait et je peux maintenant avoir exactement cela. 

Vérifiez ce Gist cela peut également résoudre votre problème.

0
George D.

C'était ma solution.

J'ai créé une migration de passeport de configuration pour installer le client et modifier le nom de la colonne de la table oauth_access_tokens en longtext, afin que je puisse l'utiliser pour stocker le jeton d'accès.

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();
    });
}

Ensuite, j'ai ajouté la méthode suivante à mon modèle d'utilisateur.

/**
 * 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;
}

alors dans mon transformateur je peux l'appeler pour récupérer le jeton d'accès des utilisateurs, ou en créer un.

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

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