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-socialitesocialiteproviders/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配置实践解析【教程】