Google OAuth无法获取token,$_GET['code']与getVar('code')均为空
问题排查方向
- 重定向URI与回调路由不匹配
你的代码中设置的回调地址为http://localhost/pharma/User/sign_in,但当前处理OAuth回调的方法是signup_with_gmail,需确认sign_in对应的路由是否指向signup_with_gmail方法。Google授权后只会将code参数发送到你配置的回调地址,如果该地址对应的逻辑不是当前这段代码,自然无法获取到code参数。 - Google Cloud控制台配置不一致
需确认Google Cloud凭据页中填写的授权重定向URI,与代码中setRedirectUri传入的地址完全一致,包括HTTP/HTTPS协议、域名、端口、路径、末尾斜杠都要完全匹配,任意一处不一致都会导致授权后回调参数异常。 - 缺少授权跳转逻辑
你当前只编写了回调处理逻辑,需额外编写跳转逻辑生成Google授权链接引导用户跳转认证:
若用户直接访问// 授权跳转逻辑示例,放在触发Google登录的方法中 if (!isset($_GET['code'])) { $auth_url = $google_client->createAuthUrl(); header('Location: ' . filter_var($auth_url, FILTER_SANITIZE_URL)); exit(); }signup_with_gmail方法,没有经过Google授权跳转流程,请求中自然不会携带code参数。 - 框架参数被拦截丢失
可以先输出完整的GET参数数组确认参数传递情况:print_r($_GET);
如果你使用的是CodeIgniter4框架,优先使用$this->request->getGet('code')获取GET参数,getVar()会优先读取POST参数,可能存在取值优先级问题。同时排查是否有全局路由重写、中间件逻辑拦截吃掉了GET参数。 - 访问地址与配置不一致
确认你浏览器访问站点的前缀与回调地址一致,例如你用127.0.0.1访问站点,但回调地址填的是localhost,二者不一致会导致参数无法传递到对应方法。
内容的提问来源于stack exchange,提问作者ALI HAIDER
相关产品推荐
相关产品推荐

