📜  如何在 laravel 中创建访问令牌 - PHP (1)

📅  最后修改于: 2023-12-03 14:52:23.590000             🧑  作者: Mango

如何在 Laravel 中创建访问令牌

访问令牌是一种用于访问受保护资源的凭证。在 Laravel 中,您可以使用 Passport 扩展包轻松地创建和管理访问令牌。

安装 Passport

要使用 Passport 扩展包,您需要在 Laravel 项目中安装它。您可以在终端中通过以下命令来安装它:

composer require laravel/passport
配置 Passport

安装 Passport 扩展包后,您需要运行以下命令来创建必要的数据库迁移:

php artisan migrate

接下来,运行以下命令来生成 Passport 所需的加密密钥:

php artisan passport:install

然后,您需要将 Passport 的服务提供者添加到 config/app.php 文件中的 providers 数组中:

'providers' => [
    // Other service providers...

    Laravel\Passport\PassportServiceProvider::class,
],

最后,运行以下命令来发布必要的 Passport 配置文件:

php artisan vendor:publish --tag=passport-config
创建访问令牌

安装和配置 Passport 后,您可以使用以下代码来创建访问令牌:

use Illuminate\Http\Request;
use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens;

    // ...

    public function createToken(Request $request, $name, array $scopes = [])
    {
        return $this->createTokenHelper($request, $name, $scopes);
    }
}

在上面的代码中,我们将 HasApiTokens trait 添加到 User 模型中,并创建了一个名为 createToken 的辅助方法,该方法用于创建新的访问令牌。

要创建新的访问令牌,请在 User 模型实例上调用 createToken 方法:

$user = Auth::user();
$token = $user->createToken($request, 'Token Name', ['read']);

在上面的代码中,我们使用 Auth::user() 方法获得当前经过身份验证的用户,调用 createToken 方法以创建新的访问令牌,并将创建的访问令牌存储在名为 $token 的变量中。

撤销访问令牌

您可以使用以下代码来撤销访问令牌:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;

class User extends Authenticatable
{
    // ...

    public function revokeToken(Request $request, $tokenId)
    {
        $accessToken = $this->tokens()->where('id', $tokenId)->first();

        if (!$accessToken) {
            return;
        }

        DB::table('oauth_refresh_tokens')
            ->where('access_token_id', $tokenId)
            ->update(['revoked' => true]);

        $accessToken->revoke();
    }
}

在上面的代码中,我们创建了一个名为 revokeToken 的辅助方法,该方法用于撤销给定的访问令牌。

要撤销访问令牌,请将 User 模型实例作为第一个参数传递给 revokeToken 方法,并将要撤销的访问令牌的 ID 作为第二个参数传递。

结论

在本文中,我们介绍了如何在 Laravel 中创建和管理访问令牌。如果您想了解有关 Laravel 和 Passport 的更多信息,请查看官方文档。