Laravel Bluesky 支持两种认证方式。完成认证后,两种方式调用 API 的方法是通用的。
LegacyAgent 这个命名表示的是“OAuth 之前的认证方式”,但 App Password 本身并没有废弃计划。在通知、自动发帖等无需用户操作的场景中,App Password 更简单,也更合适。
BlueskyManager 是 Facade Bluesky 的具体实现。使用 login() 或 withToken() 设置 agent 后,之后的 API 调用在两种认证方式下使用相同的方法。
App Password (LegacyAgent)
认证流程
Bluesky::login()
只需在 .env 中配置 App Password 并调用 login()。
复用 LegacySession
如果每次都调用 login(),每次都会产生 API 请求。缓存并复用 session 会更加高效。
LegacySession 的主要键
适用场景
- 后台任务、队列处理中的自动发帖
- 使用 Laravel Notification 通道进行的通知
- 批处理、定时任务
- 使用应用自身的账号发帖
OAuth (OAuthAgent)
认证流程
Bluesky::withToken()
将通过 Socialite 获取的 OAuthSession 传给 withToken()。
在后台任务或 Console 中,也可以用保存在数据库里的值组装 OAuthSession。
OAuthSession 的主要键
OAuth 的 refresh_token 只能使用一次。请通过 OAuthSessionUpdated 事件,在 token 更新后一定更新数据库。详情请参考 Socialite。
适用场景
- 通过 Socialite 实现用户登录
- 代表用户调用 API
- 需要针对每个用户使用不同账号进行操作的场景
认证之后的 API 调用是通用的
无论使用哪种认证方式,withToken() 之后使用的都是相同的 API 方法。
BlueskyManager 在内部会根据情况使用 LegacyAgent 或 OAuthAgent,但对调用方代码没有影响。
应该选哪种?
纠结时,按目的划分最直观。“应用自己动作”就用 App Password,“用户来操作”就用 OAuth。两者也可以组合使用,比如通知用 App Password、用户登录用 OAuth 是常见的组合。
参考链接