Hybridauth 3.8.0集成Google Provider报Invalid Credentials错误
HybridAuth 3.8.0 对接Google第三方登录401无效凭证修复方案
问题核心原因
抛出invalid Credentials401错误和GCP同意屏幕测试模式无直接关联,是代码逻辑存在5处明确问题:
- 未通过Hybridauth主类初始化实例,直接实例化Google Provider时无法读取会话中存储的临时授权码、state校验参数,完全跳过了授权码换取access_token的流程,请求用户信息接口时自然携带无效凭证
- 未主动开启会话,Hybridauth依赖SESSION存储临时授权数据,未开会话会导致跨页授权数据丢失
- 登录页异常捕获存在语法错误:
$e->getMessage未加方法执行括号,实际触发异常时无法输出正确报错信息 - 回调页错误注释
$adapter->authenticate()方法:该方法会自动判断当前请求阶段,回调阶段执行不会触发谷歌重定向,会自动完成授权码交换、state合法性校验全流程,注释后直接跳过了凭证生成步骤 - 两个页面未统一加载配置,回调页直接使用
$config变量会触发未定义变量错误,导致配置加载失效
分步修复方案
1. 抽离公共配置
新建公共配置文件hybridauth_config.php,统一管理依赖加载、会话开启、OAuth配置,避免两个页面配置不一致:
<?php // 必须在所有输出前开启会话 session_start(); // 引入composer安装的Hybridauth依赖,根据你的实际路径调整 require_once __DIR__ . '/vendor/autoload.php'; $config = [ 'callback' => 'https://你的域名/gcallback.php', // 注意:上述回调地址必须和GCP OAuth客户端配置的已授权重定向URI完全一致,包含协议、路径、后缀,不能有多余斜杠 'keys' => [ 'id' => '你的Google OAuth客户端ID', 'secret' => 'GCP控制台生成的真实客户端密钥' // 不要填占位符'secret' ], 'scope' => 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile', 'authorize_url_parameters' => [ 'approval_prompt' => 'force', 'access_type' => 'offline' ], ];
2. 修正登录发起页Sign-In.php代码
<?php require __DIR__ . '/hybridauth_config.php'; try { $hybridauth = new \Hybridauth\Hybridauth($config); // 发起谷歌授权跳转 $adapter = $hybridauth->authenticate('Google'); header('Location: /gcallback.php'); exit; } catch(Exception $e) { // 补全getMessage方法的括号 die($e->getMessage()); }
3. 修正回调页gcallback.php代码
<?php require __DIR__ . '/hybridauth_config.php'; try { $hybridauth = new \Hybridauth\Hybridauth($config); $adapter = $hybridauth->authenticate('Google'); // 此处authenticate不会触发重定向,会自动完成授权码换access_token、state校验流程 $userdata = $adapter->getUserProfile(); var_dump($userdata); // 业务逻辑处理完成后可根据需要断开连接 // $adapter->disconnect(); } catch(Exception $e) { die($e->getMessage()); }
修复后校验项
如果调整代码后仍报错,逐一核对以下配置:
- GCP控制台OAuth客户端的已授权重定向URI和代码中callback地址完全匹配
- 测试模式下,当前登录使用的谷歌账号已提前添加到OAuth同意屏幕的测试用户列表
- 客户端ID、客户端密钥复制正确,无多余空格、换行
- 部署服务器可正常连通谷歌OAuth服务接口,无网络拦截
内容的提问来源于stack exchange,提问作者White Rabbit
相关产品推荐
相关产品推荐

