php - tutorial - Laravel Passport Print Personal Access Token
medium laravel passport (4)
Estoy usando el paquete de pasaporte de Laravel para proporcionar autenticación basada en tokens a mi api de descanso. En este momento, estoy usando el concepto de token de acceso personal para generar el token de acceso.
Para generar un token de acceso para un solo usuario, estoy usando el código a continuación para generar un token con el nombre '' 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...
Más tarde, quiero mostrar el token de acceso personal en el panel de administración, lo que me dificulta obtener el token generado nuevamente. Intenté el código siguiente, pero no pude obtener el token de acceso.
$user = User::find(1)
dd($user->tokens())
También intenté usar los elementos de pasaporte vue, pero solo muestra el nombre del token de acceso, no el token real.
<passport-personal-access-tokens></passport-personal-access-tokens>
Por favor, ayúdame a resolver esto.
Gracias
Creo que deberías generar el token antes o al mismo tiempo que estás creando un usuario y almacenarlo en la base de datos:
Agrega la columna:
$table->string(''token'', 60)->unique();
Guarde el token:
$token = $user->createToken(''android'')->accessToken;
$user = User::create([
''name'' => $data[''name''],
''email'' => $data[''email''],
''password'' => bcrypt($data[''password'']),
''token'' => $token,
]);
Entonces estará disponible como:
$user->token;
Puedes probar el siguiente código:
$user->tokens->load(''client'')->filter(function ($token) {
return ! $token->client->firstParty() && ! $token->revoked;
})->values();
Esta fue mi solución.
Creé una migración de pasaporte de configuración para instalar el cliente y modificar la columna de nombre en la tabla oauth_access_tokens para longtext, por lo que podría usarlo para almacenar el token de acceso.
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();
});
}
Luego agregué el siguiente método a mi modelo de usuario.
/**
* 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;
}
luego en mi transformador puedo llamarlo para recuperar el token de acceso de los usuarios, o crear uno.
/**
* A Fractal transformer.
*
* @param User $user
* @return array
*/
public function transform(User $user) {
return [
''access_token'' => $user->getAccessToken(),
];
}
Tengo un problema similar con laravel & vue js ii actualizado. Mi manejador de middleware permite acceder al token de autorización. funciona, encuentra para mí. Algún tiempo será útil Laravel Passport 401 Error no autorizado usando Apache y Vue