您好,欢迎访问宜昌市隼壹珍商贸有限公司
400 890 5375Socialite::driver('wechat')报错因微信非官方驱动,需安装socialiteproviders/wechat并注册ServiceProvider及EventServiceProvider监听;GitHub登录须严格匹配redirect_uri和scopes;微信扫码登录需用wechat_open驱动且域名完全一致;回调中应按provider_id+provider查重绑定账号。
因为 Laravel 官方 Socialite 默认不支持微信,必须手动注册扩展驱动。GitHub 等 OAuth2 标准平台可直接用,但微信(尤其是国内公众号/扫码登录)需额外安装 overtrue/laravel-socialite 或 socialiteproviders/wechat 等第三方 Provider。
推荐使用 socialiteproviders/wechat,它兼容 Laravel 9+ 且维护活跃:
composer require socialiteproviders/wechat
config/app.php 的 providers 数组末尾添加:SocialiteProviders\Manager\ServiceProvider::class,
app/Providers/EventServiceProvider.php 的 $listen 中注册事件监听:[
\SocialiteProviders\Manager\SocialiteWasCalled::class => [
'SocialiteProviders\\WeChat\\WeChatExtendSocialite@handle',
],
]注意:不要漏掉 EventServiceProvider 配置,否则 wechat 驱动不会被注册,Socialite::driver('wechat') 就会报错。
GitHub 登录走标准 OAuth2,无需额外 Provider,但必须严格匹配回调地址和权限范围。
Authorization callback URL,例如:https://your-app.com/login/github/callback(必须与 Laravel 路由完全一致,含 HTTPS 和尾部斜杠)config/services.php 中配置:'github' => [
'client_id' => env('GITHUB_CLIENT_ID'),
'client_secret' => env('GITHUB_CLIENT_SECRET'),
'redirect' => env('GITHUB_REDIRECT_URI', 'https://your-app.com/login/github/callback'),
],user:email):Socialite::driver('github')->scopes(['read:user', 'user:email'])->redirect()
常见坑:本地开发用 http://localhost 无法通过 GitHub 校验,必须用 ngrok 或 127.0.0.1 + HTTPS 代理;redirect 值若写成 /login/github/callback(相对路径),Socialite 会拼错完整 URL 导致 404。

微信开放平台对 redirect_uri 域名校验极严:必须备案、必须 HTTPS、且必须与公众平台后台「网页授权获取用户基本信息」中填写的域名**完全一致(包括 www 前缀)**。
your-app.com(不能带 https:// 或路径)config/services.php 中微信配置的 redirect 必须是完整 HTTPS 地址,且域名部分与上一步一致:'wechat' => [
'client_id' => env('WECHAT_APP_ID'),
'client_secret' => env('WECHAT_APP_SECRET'),
'redirect' => env('WECHAT_REDIRECT_URI', 'https://your-app.com/login/wechat/callback'),
],www.your-app.com 授权,但跳转时用 your-app.com,也会触发 domain mismatch另外,微信扫码登录实际走的是 wechat_open 驱动(对应开放平台扫码),不是 wechat(公众号网页授权)。如果要用扫码登录,应安装 socialiteproviders/wechat-open 并注册对应 Provider。
不要在回调中直接 create() 用户,必须先查重(按第三方 id + provider 组合),避免重复注册或邮箱冲突。
routes/web.php):Route::get('/login/{provider}/callback', [SocialLoginController::class, 'handleCallback']);handleCallback 方法中,统一处理不同 provider:$user = Socialite::driver($provider)->user();
$user->getId() 和 $provider 查 social_accounts 表(不要依赖 $user->getEmail(),GitHub 可能不公开邮箱):$socialAccount = SocialAccount::where('provider_id', $user->getId())
->where('provider', $provider)
->first();容易忽略的点:微信返回的 $user->getId() 是 openid(公众号)或 unionid(开放平台),二者不可混用;GitHub 返回的是数字 ID,稳定不变。别把不同平台的 ID 存进同一个字段还指望去重。