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 】
【
网络技术251811 】
【
AI营销90571 】
相关推荐:
焦点电影公司作品,电影焦点结局是什么?
制作ppt免费网站有哪些,有哪些比较好的ppt模板下载网站?
html文件怎么打开证书错误_https协议的html打开提示不安全【指南】
Laravel的辅助函数有哪些_Laravel常用Helpers函数提高开发效率
Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】
在centOS 7安装mysql 5.7的详细教程
如何在 Telegram Web View(iOS)中防止键盘遮挡底部输入框
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
如何在景安云服务器上绑定域名并配置虚拟主机?
Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】
EditPlus中的正则表达式实战(6)
微信小程序 require机制详解及实例代码
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
Laravel怎么定时执行任务_Laravel任务调度器Schedule配置与Cron设置【教程】
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
5种Android数据存储方式汇总
如何快速配置高效服务器建站软件?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
PHP正则匹配日期和时间(时间戳转换)的实例代码
猎豹浏览器开发者工具怎么打开 猎豹浏览器F12调试工具使用【前端必备】
Laravel定时任务怎么设置_Laravel Crontab调度器配置
企业网站制作这些问题要关注
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
JavaScript中的标签模板是什么_它如何扩展字符串功能
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
浅述节点的创建及常见功能的实现
Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用
Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤
laravel怎么通过契约(Contracts)编程_laravel契约(Contracts)编程方法
Laravel PHP版本要求一览_Laravel各版本环境要求对照
用v-html解决Vue.js渲染中html标签不被解析的问题
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
JavaScript数据类型有哪些_如何准确判断一个变量的类型
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
Android仿QQ列表左滑删除操作
bing浏览器学术搜索入口_bing学术文献检索地址
Laravel如何实现邮箱地址验证功能_Laravel邮件验证流程与配置
实现点击下箭头变上箭头来回切换的两种方法【推荐】
rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted
中国移动官方网站首页入口 中国移动官网网页登录
Laravel Octane如何提升性能_使用Laravel Octane加速你的应用
Win11怎样安装网易有道词典_Win11安装词典教程【步骤】
如何在 React 中条件性地遍历数组并渲染元素
Laravel如何实现API版本控制_Laravel版本化API设计方案
微信小程序 配置文件详细介绍
如何在万网自助建站平台快速创建网站?
Laravel任务队列怎么用_Laravel Queues异步处理任务提升应用性能
大连 网站制作,大连天途有线官网?
JavaScript模板引擎Template.js使用详解
如何在阿里云高效完成企业建站全流程?


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