当前位置:首页 > PHP

php实现passport

2026-01-29 21:32:58PHP

PHP 实现 Passport 认证

Passport 是 Laravel 官方提供的 OAuth2 认证服务器实现,用于 API 认证。以下是实现 Passport 的基本步骤:

安装 Passport

通过 Composer 安装 Passport 包:

composer require laravel/passport

运行数据库迁移,创建 Passport 所需的数据表:

php artisan migrate

安装 Passport,生成加密密钥和客户端:

php artisan passport:install

配置 Passport

App\Models\User 模型中添加 HasApiTokens trait:

use Laravel\Passport\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

App\Providers\AuthServiceProviderboot 方法中注册 Passport 路由:

use Laravel\Passport\Passport;

public function boot()
{
    $this->registerPolicies();

    Passport::routes();
}

config/auth.php 中设置 API 驱动为 passport

'guards' => [
    'api' => [
        'driver' => 'passport',
        'provider' => 'users',
    ],
],

创建客户端

使用 Artisan 命令创建客户端:

php artisan passport:client --password

使用 Passport

在路由中使用 auth:api 中间件保护 API 路由:

Route::get('/user', function () {
    return auth()->user();
})->middleware('auth:api');

获取访问令牌的示例请求:

curl -X POST http://your-app.com/oauth/token \
    -H "Accept: application/json" \
    -d "grant_type=password" \
    -d "client_id=client-id" \
    -d "client_secret=client-secret" \
    -d "username=user@example.com" \
    -d "password=password" \
    -d "scope=*"

自定义 Passport 配置

令牌有效期设置

php实现passport

AuthServiceProvider 中自定义令牌有效期:

Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));

作用域设置

定义作用域:

Passport::tokensCan([
    'read' => 'Read access',
    'write' => 'Write access',
]);

自定义客户端模型

创建自定义客户端模型并注册:

Passport::useClientModel(Client::class);

前端集成

JavaScript 集成

安装 laravel-passport npm 包:

npm install --save laravel-passport

在 JavaScript 中使用:

php实现passport

const { Passport } = require('laravel-passport');

Passport.initialize({
    clientId: 'client-id',
    clientSecret: 'client-secret',
});

Vue 集成

使用官方提供的 Vue 组件:

Vue.component(
    'passport-clients',
    require('./components/passport/Clients.vue').default
);

常见问题解决

令牌刷新问题

确保在 AuthServiceProvider 中正确设置刷新令牌有效期:

Passport::refreshTokensExpireIn(now()->addDays(30));

CORS 问题

app/Http/Middleware/VerifyCsrfToken.php 中添加例外:

protected $except = [
    'oauth/*'
];

性能优化

对于高流量应用,考虑使用 Redis 存储令牌:

Passport::tokensExpireIn(now()->addDays(15));
Passport::refreshTokensExpireIn(now()->addDays(30));
Passport::personalAccessTokensExpireIn(now()->addMonths(6));

标签: phppassport
分享给朋友:

相关文章

php实现登录

php实现登录

PHP 登录功能实现 数据库连接与用户表创建 创建一个数据库连接文件 db.php,用于管理数据库连接。MySQL 示例代码如下: <?php $host = 'localhost'; $db…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php无限分类的实现

php无限分类的实现

PHP无限分类的实现 无限分类是一种常见的树形结构数据组织方式,适用于商品分类、菜单管理、地区选择等场景。以下是几种实现方法: 递归实现法 递归是最直观的实现方式,通过函数自身调用来遍历子分类。数据…

php 实现mvc

php 实现mvc

PHP 实现 MVC 架构的方法 MVC(Model-View-Controller)是一种常见的软件设计模式,用于分离业务逻辑、用户界面和用户输入。以下是 PHP 实现 MVC 架构的关键步骤:…

php 链表实现

php 链表实现

在 PHP 中实现链表可以通过类来模拟链表节点(Node)和链表(LinkedList)结构。以下是链表的完整实现示例,包含基础操作如插入、删除、遍历等。 链表节点类(Node) 链表的基本单元是节…

php实现单一入口

php实现单一入口

PHP 单一入口实现方法 单一入口(Single Entry Point)是一种设计模式,通过一个入口文件(如index.php)集中处理所有请求,实现路由分发、统一初始化等操作。以下是实现方法:…