什么是 Laravel Socialite
Laravel Socialite 是官方提供的包,用于简洁地实现基于 OAuth 2.0 的社交登录。它已支持 GitHub、Google、Facebook、X(Twitter)、LinkedIn 等主流 OAuth 提供方,只需数行代码就能完成原本复杂的 OAuth 实现。 内置支持的提供方如下:社交登录的流程
安装
使用 Composer 安装:升级 Socialite 大版本时请务必查看升级指南。
配置
config/services.php
在config/services.php 中添加各提供方的客户端 ID、密钥及回调 URL。
在
redirect 中使用相对路径时会被自动解析为完整 URL。.env
通过环境变量管理凭据。下面以 GitHub 为例:认证流程
路由
OAuth 认证需要两个路由:一个用于重定向,一个用于回调。保存用户并登录
在回调路由中获取用户信息,保存到数据库后登录。获取用户信息
user() 方法返回的对象包含如下属性和方法。
通过访问令牌获取用户
如果已有访问令牌,可用userFromToken() 获取用户信息。
无状态模式
对于不使用 Cookie Session 的 API,可以通过stateless() 关闭状态校验。
数据库集成
迁移
向users 表添加用于社交登录的列。
使用 provider 列支持多个提供方
若要统一管理多个提供方,通常使用provider / provider_id 两列。
与已有用户关联
若要将账户与拥有同邮箱的已有用户关联,可以先按邮箱查找,再更新对应列。作用域与选项
添加作用域
使用scopes() 方法可以追加作用域。
setScopes() 会覆盖原有的所有作用域。
可选参数
使用with() 方法可以在重定向请求中附加额外参数。
Slack Bot 令牌
要生成 Slack Bot 令牌,可以使用asBotUser()。
测试
Socialite 提供了 mock 机制,可以在不真的调用提供方接口的情况下测试 OAuth 流程。测试重定向
测试回调
向fake() 传入用户实例,即可模拟从提供方返回的用户信息。可以用 User::fake() 生成 fake 用户。
fake() 中传入更多属性。
Laravel\Socialite\One\User 类。
自定义提供方
如果内置提供方无法满足需求,官方推荐的做法是使用Socialite::extend() 注册自定义驱动。SocialiteManager 继承自 Illuminate\Support\Manager,可以与其他 Laravel 驱动系统采用相同的方式进行扩展。
关于 Manager 模式与
extend() 的机制,也可参考 Manager 类解析。1. 创建提供方类
继承Laravel\Socialite\Two\AbstractProvider,实现 4 个抽象方法。
2. 在服务提供者中注册
在AppServiceProvider 的 boot() 中通过 Socialite::extend() 注册驱动。
3. 添加配置
4. 像普通 Socialite 一样使用
注册完成后就可以像内置提供方一样使用完全相同的 API。相关包
以下是本站作者维护的 Socialite 扩展包。它们都通过Socialite::extend() 的规范方式实现,只需在 config/services.php 中加入配置即可使用。
LINE
LINE SDK for Laravel。除 Socialite 的 OAuth 登录外,还集成了 Messaging API。
Bluesky
与 AT Protocol(Bluesky)集成,支持 OAuth 认证与发送 Post。
Discord
Discord OAuth2 登录。
Threads
与 Meta Threads 集成,支持 OAuth 认证与发帖 API。
Amazon
通过 Login with Amazon 实现 OAuth 登录。
Mastodon
连接到 Mastodon 实例的 OAuth 登录。
WordPress
WordPress.com 或自托管 WordPress 的 OAuth 登录。