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 登录:使用
socialiteproviders/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,否则部分平台(如微信)会拒绝回调。
# laravel
# php
# 前端
# git
# go
# composer
# github
# cad
# 微信
# app
# 事件
# http
# https
# 回调
# 第三方
# 的是
# 如果你
# 国内
# 线上
# 还需要
# 不支持
# 为例
# 跳转
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
中国移动官方网站首页入口 中国移动官网网页登录
Laravel用户认证怎么做_Laravel Breeze脚手架快速实现登录注册功能
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
免费视频制作网站,更新又快又好的免费电影网站?
三星、SK海力士获美批准:可向中国出口芯片制造设备
如何在万网ECS上快速搭建专属网站?
Laravel如何设置自定义的日志文件名_Laravel根据日期或用户ID生成动态日志【技巧】
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
千库网官网入口推荐 千库网设计创意平台入口
如何撰写建站申请书?关键要点有哪些?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
Laravel如何使用Sanctum进行API认证?(SPA实战)
Laravel API资源类怎么用_Laravel API Resource数据转换
网站制作价目表怎么做,珍爱网婚介费用多少?
html5的keygen标签为什么废弃_替代方案说明【解答】
怎么用AI帮你为初创公司进行市场定位分析?
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
高端企业智能建站程序:SEO优化与响应式模板定制开发
如何快速配置高效服务器建站软件?
WEB开发之注册页面验证码倒计时代码的实现
如何在IIS中配置站点IP、端口及主机头?
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
香港服务器网站卡顿?如何解决网络延迟与负载问题?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
iOS中将个别页面强制横屏其他页面竖屏
,南京靠谱的征婚网站?
Laravel如何使用Service Container和依赖注入?(代码示例)
如何在橙子建站中快速调整背景颜色?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复
高端智能建站公司优选:品牌定制与SEO优化一站式服务
Laravel如何配置和使用缓存?(Redis代码示例)
如何用西部建站助手快速创建专业网站?
如何在IIS中新建站点并配置端口与IP地址?
微信推文制作网站有哪些,怎么做微信推文,急?
html如何与html链接_实现多个HTML页面互相链接【互相】
googleplay官方入口在哪里_Google Play官方商店快速入口指南
javascript基本数据类型及类型检测常用方法小结
javascript事件捕获机制【深入分析IE和DOM中的事件模型】
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
非常酷的网站设计制作软件,酷培ai教育官方网站?
Laravel如何实现数据导出到CSV文件_Laravel原生流式输出大数据量CSV【方案】
Laravel如何处理CORS跨域请求?(配置示例)
网页设计与网站制作内容,怎样注册网站?
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
php 三元运算符实例详细介绍
详解Android图表 MPAndroidChart折线图
Linux网络带宽限制_tc配置实践解析【教程】


// 微信登录重定向
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);
}
}