跳转到主要内容

什么是 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 为例:
在 GitHub 中,可以在 GitHub Developer Settings 创建 OAuth App 来获得 Client ID 与密钥。

认证流程

路由

OAuth 认证需要两个路由:一个用于重定向,一个用于回调。

保存用户并登录

在回调路由中获取用户信息,保存到数据库后登录。
使用 updateOrCreate 时,users 表中必须存在 github_id 列。请参考后文的迁移示例。

获取用户信息

user() 方法返回的对象包含如下属性和方法。

通过访问令牌获取用户

如果已有访问令牌,可用 userFromToken() 获取用户信息。

无状态模式

对于不使用 Cookie Session 的 API,可以通过 stateless() 关闭状态校验。

数据库集成

迁移

users 表添加用于社交登录的列。

使用 provider 列支持多个提供方

若要统一管理多个提供方,通常使用 provider / provider_id 两列。
回调处理时动态传入提供方名称。

与已有用户关联

若要将账户与拥有同邮箱的已有用户关联,可以先按邮箱查找,再更新对应列。

作用域与选项

添加作用域

使用 scopes() 方法可以追加作用域。
setScopes() 会覆盖原有的所有作用域。

可选参数

使用 with() 方法可以在重定向请求中附加额外参数。
请勿通过 with() 传递 stateresponse_type 等保留关键字。

Slack Bot 令牌

要生成 Slack Bot 令牌,可以使用 asBotUser()

测试

Socialite 提供了 mock 机制,可以在不真的调用提供方接口的情况下测试 OAuth 流程。

测试重定向

测试回调

fake() 传入用户实例,即可模拟从提供方返回的用户信息。可以用 User::fake() 生成 fake 用户。
默认会设置 fake 的 OAuth 令牌,如需覆盖可在 fake() 中传入更多属性。
如果要伪造 OAuth 1 用户,请使用 Laravel\Socialite\One\User 类。

自定义提供方

如果内置提供方无法满足需求,官方推荐的做法是使用 Socialite::extend() 注册自定义驱动。SocialiteManager 继承自 Illuminate\Support\Manager,可以与其他 Laravel 驱动系统采用相同的方式进行扩展。
关于 Manager 模式与 extend() 的机制,也可参考 Manager 类解析

1. 创建提供方类

继承 Laravel\Socialite\Two\AbstractProvider,实现 4 个抽象方法。
需要实现的 4 个方法的作用如下。

2. 在服务提供者中注册

AppServiceProviderboot() 中通过 Socialite::extend() 注册驱动。

3. 添加配置

4. 像普通 Socialite 一样使用

注册完成后就可以像内置提供方一样使用完全相同的 API。
使用第三方通过 extend() 正规扩展 Socialite 的包也是不错的选择。

相关包

以下是本站作者维护的 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 登录。
最后修改于 2026年7月18日