Laravel 用 Socialite 接入第三方登录:OAuth 回调与用户自动注册
为什么用 Socialite
自己对接 OAuth 要走授权码换 token、token 换用户信息、刷新 token 一整套流程,每个平台字段还不一样。Socialite 把这些封装成统一接口:redirect 把用户带到第三方,user 把回调里的信息解析成对象。支持 GitHub、Google、微信等常见 provider,新增一个登录方式基本只改配置。
安装与配置
先装扩展包,再到 services 配置里填各平台的 client id 和 secret,最后在 .env 里放真实凭据。
composer require laravel/socialite
// config/services.php
'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_REDIRECT_URI'),
],
路由与控制器
两条路由即可:一条把用户重定向出去,一条接收回调。回调里拿到第三方用户对象,再决定是登录还是注册。
use Laravel\Socialite\Facades\Socialite;
use App\Models\User;
use Illuminate\Support\Facades\Auth;
Route::get('/auth/github/redirect', function () {
return Socialite::driver('github')->redirect();
});
Route::get('/auth/github/callback', function () {
$githubUser = Socialite::driver('github')->user();
$user = User::firstOrCreate(
['github_id' => $githubUser->getId()],
[
'name' => $githubUser->getName() ?? $githubUser->getNickname(),
'email' => $githubUser->getEmail(),
'password' => bcrypt(Str::random(24)),
]
);
Auth::login($user, true);
return redirect('/dashboard');
});
用户自动注册与账号关联
firstOrCreate 已经处理了"首次自动注册"。如果用户之前用邮箱注册过,可以再加一步:按 email 找到老账号并回填 github_id,把两种登录方式关联到同一个用户,避免重复账号。
$user = User::where('github_id', $githubUser->getId())->first();
if (! $user && $githubUser->getEmail()) {
$user = User::where('email', $githubUser->getEmail())->first();
if ($user) {
$user->github_id = $githubUser->getId();
$user->save();
}
}
if (! $user) {
$user = User::create([
'github_id' => $githubUser->getId(),
'name' => $githubUser->getName(),
'email' => $githubUser->getEmail(),
'password' => bcrypt(Str::random(24)),
]);
}
Auth::login($user, true);
上线前的注意事项
回调地址必须在第三方后台白名单里,本地用 127.0.0.1、线上用真实域名分别配置。部分 provider(如 GitHub)在用户隐藏邮箱时 getEmail 会返回 null,关联逻辑要兼容这种情况。state 参数由 Socialite 自动处理,用于防 CSRF,不要关掉。最后给 User 模型加上 github_id 字段的迁移,并在 $fillable 里放行。
小结
Socialite 把 OAuth 的脏活收进统一接口,接入一个新平台主要是配置加几行回调代码。配合 firstOrCreate 与按 email 关联,既能自动注册新用户,也能把第三方账号并回已有用户,避免一套系统里出现多个重复身份。
test1
文章作者
为什么用 Socialite 自己对接 OAuth 要走授权码换 token、token 换用户信息、刷新 token...
- 分类
- 技术
- 发布时间
- 2026-11-03
- 字数
- 约 2251 字
- 阅读
- 1 次
