Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
发表时间:2025-12-25 00:00:00
文章作者:裘德小鎮的故事
浏览次数:
Laravel通过Socialite及社区扩展包实现微信、QQ、微博登录,需安装laravel/socialite和对应平台包,配置服务信息、环境变量并注册事件监听,再创建控制器处理授权流程与回调,最后定义路由和前端按钮即可完成集成。
Laravel 提供了非常优雅的方式来实现第三方登录,其中 Laravel Socialite 是官方推荐的扩展包,支持 OAuth1 和 OAuth2 协议的平台,如微信、QQ、微博等主流社交平台。虽然 Socialite 原生主要支持 GitHub、Google、Facebook 等国际平台,但通过社区扩展包可以轻松集成微信、QQ、微博等国内服务。
安装 Laravel Socialite
在 Laravel 项目根目录下运行以下命令安装 Socialite:
composer require laravel/socialite
如果你使用的是 Laravel 8 及以下版本,还需要手动注册服务提供者和门面(Laravel 9+ 已自动注册):
- 在 config/app.php 中添加服务提供者:
'providers' => [
// ...
Laravel\Socialite\SocialiteServiceProvider::class,
]
- 添加门面别名:
'aliases' => [
// ...
'Socialite' => Laravel\Socialite\Facades\Socialite::class,
]
安装支持国内平台的扩展包
Socialite 原生不支持微信、QQ、微博,需借助社区维护的扩展包:
-
微信登录:使用
overtrue/laravel-socialite或socialiteproviders/weixin -
QQ 登录:使用
socialitepro
viders/qq -
微博登录:使用
socialiteproviders/weibo
以 socialiteproviders 系列为例如下:
composer require socialiteproviders/weixin composer require socialiteproviders/qq composer require socialiteproviders/weibo
配置第三方应用信息
前往各平台开发者中心创建应用,获取 Client ID (App ID) 和 Client Secret (App Key),并设置回调地址(如:http://your-domain.com/login/weixin/callback)。
将配置写入 config/services.php:
'weixin' => [
'client_id' => env('WEIXIN_APP_ID'),
'client_secret' => env('WEIXIN_APP_SECRET'),
'redirect' => env('WEIXIN_REDIRECT_URI'),
],
'qq' => [
'client_id' => env('QQ_APP_ID'),
'client_secret' => env('QQ_APP_SECRET'),
'redirect' => env('QQ_REDIRECT_URI'),
],
'weibo' => [
'client_id' => env('WEIBO_APP_ID'),
'client_secret' => env('WEIBO_APP_SECRET'),
'redirect' => env('WEIBO_REDIRECT_URI'),
],
然后在 .env 文件中添加对应变量:
WEIXIN_APP_ID=your_weixin_appid WEIXIN_APP_SECRET=your_weixin_secret WEIXIN_REDIRECT_URI=http://localhost/login/weixin/callback QQ_APP_ID=your_qq_appid QQ_APP_SECRET=your_qq_secret QQ_REDIRECT_URI=http://localhost/login/qq/callback WEIBO_APP_ID=your_weibo_appid WEIBO_APP_SECRET=your_weibo_secret WEIBO_REDIRECT_URI=http://localhost/login/weibo/callback
启用 SocialiteProviders 事件监听
在 EventServiceProvider 中注册事件,确保扩展驱动被加载:
- 打开 app/Providers/EventServiceProvider.php
- 添加以下事件监听:
protected $listen = [
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
\SocialiteProviders\Weixin\WeixinExtendSocialite::class,
\SocialiteProviders\QQ\QqExtendSocialite::class,
\SocialiteProviders\Weibo\WeiboExtendSocialite::class,
],
];
编写控制器处理登录流程
创建一个控制器来处理跳转授权和回调:
php artisan make:controller SocialAuthController
示例代码:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Laravel\Socialite\Facades\Socialite;
use Exception;
class SocialAuthController extends Controller
{
// 微信登录重定向
public function redirectToWeixin()
{
return Socialite::driver('weixin')->redirect();
}
// 微信回调处理
public function handleWeixinCallback()
{
try {
$user = Socialite::driver('weixin')->user();
} catch (Exception $e) {
return redirect('/login')->withErrors(['error' => '微信登录失败']);
}
// 获取用户信息后,执行登录或注册逻辑
$this->loginOrRegister($user, 'weixin');
return redirect()->intended('/home');
}
// QQ 登录
public function redirectToQQ()
{
return Socialite::driver('qq')->redirect();
}
public function handleQQCallback()
{
$user = Socialite::driver('qq')->user();
$this->loginOrRegister($user, 'qq');
return redirect()->intended('/home');
}
// 微博登录
public function redirectToWeibo()
{
return Socialite::driver('weibo')->redirect();
}
public function handleWeiboCallback()
{
$user = Socialite::driver('weibo')->user();
$this->loginOrRegister($user, 'weibo');
return redirect()->intended('/home');
}
// 统一登录/注册逻辑
protected function loginOrRegister($socialUser, $provider)
{
// 示例:根据 provider 和 openid 查找用户
$user = User::where('provider', $provider)
->where('provider_id', $socialUser->getId())
->first();
if (!$user) {
// 创建新用户
$user = User::create([
'name' => $socialUser->getNickname(),
'avatar' => $socialUser->getAvatar(),
'provider' => $provider,
'provider_id' => $socialUser->getId(),
'email' => $socialUser->getEmail() ?? uniqid(). '@example.com',
]);
}
auth()->login($user);
}
}
定义路由
在 routes/web.php 中添加路由:
Route::get('/login/weixin', [SocialAuthController::class, 'redirectToWeixin'])->name('login.weixin');
Route::get('/login/weixin/callback', [SocialAuthController::class, 'handleWeixinCallback']);
Route::get('/login/qq', [SocialAuthController::class, 'redirectToQQ'])->name('login.qq');
Route::get('/login/qq/callback', [SocialAuthController::class, 'handleQQCallback']);
Route::get('/login/weibo', [SocialAuthController::class, 'redirectToWeibo'])->name('login.weibo');
Route::get('/login/weibo/callback', [SocialAuthController::class, 'handleWeiboCallback']);
前端添加登录按钮
在登录页面添加链接:
微信登录 QQ 登录 微博登录
基本上就这些。只要配置正确,用户点击按钮即可跳转到对应平台授权,回调后完成登录。注意线上环境必须使用 HTTPS,否则部分平台(如微信)会拒绝回调。

viders/qq







