ARTICLE DETAIL

资讯详情

深耕网站SEO优化与搜索引擎排名提升的一线实战洞察。

Lumen Passport多端同时登录:allowMultipleTokens多令牌机制实战

Lumen Passport多端同时登录:allowMultipleTokens多令牌机制实战 Lumen Passport多端同时登录allowMultipleTokens多令牌机制实战【免费下载链接】lumen-passportMaking Laravel Passport work with Lumen项目地址: https://gitcode.com/gh_mirrors/lu/lumen-passport很多基于 Lumen 的 API 项目在接入 OAuth2 认证后都会遇到一个尴尬场景同一个账号在手机、电脑、平板之间切换登录时旧设备总是被强制踢下线。这是因为 Laravel Passport 默认只允许单点登录而Lumen Passport——这个让 Laravel Passport 在 Lumen 微框架中正常运行的适配扩展包——提供了一个官方解法allowMultipleTokens 多令牌机制。开启后同一用户即可在多个设备上同时登录、互不干扰。本文将从痛点讲起带零基础开发者快速掌握多端同时登录的配置步骤与实现原理。为什么你的项目需要多端同时登录Laravel Passport 的默认互踢行为Laravel Passport 在设计上有一个安全约定同一用户在同一密码授权客户端下新签发的令牌会吊销旧令牌。也就是说用户在新设备登录成功的那一刻旧设备上的 access_token 立即失效被迫退出。这在网银、政务类等对安全要求极高的场景下是合理的但对大多数消费级产品如内容社区、电商、IM却是灾难用户手机没电临时用电脑登录手机就被踢下线家里电脑和公司电脑无法同时保持登录状态每次换设备都要重新输入账号密码流失率高多端同时登录的典型应用场景场景诉求 手机 电脑同时在线双端数据同步互不影响️ 多台办公电脑无需反复重新登录 后台管理多终端运营、客服同时操作同一账号allowMultipleTokens 多令牌机制是什么简单说allowMultipleTokens是 Lumen Passport 提供的静态开关默认值为false调用allowMultipleTokens()方法后切换为true此后同一用户在同一客户端下可以同时持有多个有效访问令牌。它的定义位于核心类src/LumenPassport.php约 L19、L31-L34 处与 Laravel Passport 的单令牌策略形成了鲜明对比也是这个扩展包最受欢迎的特色功能之一。三步开启多端同时登录的完整步骤第一步安装 Lumen Passport在 Lumen 项目中通过 Composer 安装依赖composer require dusterio/lumen-passport第二步注册服务提供者与认证路由在bootstrap/app.php中同时注册 Laravel Passport 与 Lumen Passport 两个服务提供者并启用 Facades、Eloquent 与 auth 中间件$app-withFacades(); $app-withEloquent(); $app-register(Laravel\Passport\PassportServiceProvider::class); $app-register(Dusterio\LumenPassport\PassportServiceProvider::class);然后在你的服务提供者如AuthServiceProvider的boot()方法中调用LumenPassport::routes($this-app)注册/oauth/token等认证路由。路由清单可在src/RouteRegistrar.php中查看。第三步调用 allowMultipleTokens 开启多令牌在boot()方法中加上一行代码即可完成全部配置use Dusterio\LumenPassport\LumenPassport; public function boot() { LumenPassport::routes($this-app); LumenPassport::allowMultipleTokens(); // 其他初始化代码... }至此用户从多台设备登录时每一台都会获得独立的 access_token且彼此不会互相吊销。✅多令牌机制是如何实现的理解原理能帮你更好地排查问题。Lumen Passport 重写了访问令牌签发控制器src/Http/Controllers/AccessTokenController.php在issueToken()方法中令牌签发成功后会有一次关键判断当客户端是 first-party第一方客户端且allowMultipleTokens为true时保留用户已有的历史令牌否则调用revokeOrDeleteAccessTokens()将该用户在该客户端下的其他令牌全部标记为revoked吊销。也就是说互踢还是共存完全由这个开关决定而你无需修改 Laravel Passport 的任何源码。进阶技巧按客户端设置不同令牌有效期开启多端同时登录后你可能还希望不同客户端拥有不同的令牌有效期TTL例如移动端给 14 天、桌面端给 7 天。Lumen Passport 为此提供了tokensExpireIn()方法支持按client_id分别设置LumenPassport::tokensExpireIn(Carbon::now()-addDays(14), 1); // 移动端 LumenPassport::tokensExpireIn(Carbon::now()-addDays(7), 2); // 桌面端如果不传client_id则会自动回退到 Laravel Passport 的全局 TTL 配置兼容性极好。进阶技巧定期清理过期令牌多令牌机制会让oauth_access_tokens表积累更多历史记录建议定时清理。Lumen Passport 内置了Purge命令定义于src/Console/Commands/Purge.php直接执行即可php artisan passport:purge该命令会删除过期的 refresh token 及其对应的 access token让数据库保持轻盈。常见问题与注意事项问题说明开启后旧令牌还在吗在这就是多端同时登录的核心效果想手动踢掉某个设备调用DELETE /oauth/tokens/{token_id}单独吊销该令牌是否影响安全性令牌仍各自独立、可单独吊销只是不再自动互踢适用于所有客户端吗逻辑仅针对 first-party 客户端生效总结Lumen Passport 通过一个简单的静态开关就解决了 Laravel Passport 在 Lumen 下一账号一令牌的限制让多端同时登录从理想变成现实。无论是多设备并存的移动应用还是需要多终端协作的后台系统只需LumenPassport::allowMultipleTokens()一行代码即可优雅落地。再配合按客户端定制的令牌有效期与定期清理机制你的认证体系将既灵活又健壮。如果本文对你有帮助不妨收藏起来动手在你的 Lumen 项目里实践一下吧【免费下载链接】lumen-passportMaking Laravel Passport work with Lumen项目地址: https://gitcode.com/gh_mirrors/lu/lumen-passport创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表