调用Google securetoken接口换取id token返回400 Bad Request问题求助
问题原因
你遇到的INVALID_REFRESH_TOKEN错误确实是因为当前使用的refresh token由Firebase Auth模拟器生成导致的。
Firebase本地模拟器生成的所有身份凭证(包括refresh token、ID token)仅在本地模拟器环境范围内有效,不会同步到Firebase官方生产服务端,你拿着模拟器签发的refresh token去请求谷歌官方生产环境的token刷新接口,服务端无法校验通过,自然会返回无效凭证错误。
解决方案
- 本地使用模拟器开发时,不需要手动调用REST接口刷新token,Firebase JS SDK在连接模拟器的状态下会自动处理ID token的刷新逻辑,你需要获取最新有效ID token时,直接调用
user.getIdToken()方法即可。 - 如果你需要测试refresh token换取ID token的REST接口功能,可以暂时关闭Firebase Auth模拟器,使用线上真实Firebase Auth服务登录获取refresh token后再发起请求,即可正常得到返回结果。
额外优化提示:你当前代码里直接打印response对象看不到完整的响应内容,需要先解析响应体才能拿到结构化的返回数据,参考写法:
fetch('https://securetoken.googleapis.com/v1/token?key=' + process.env.NEXT_PUBLIC_FIREBASE_API_KEY, { method: 'POST', headers: {'Content-Type': 'application/x-www-form-urlencoded'}, body: 'grant_type=refresh_token&refresh_token=' + user.refreshToken }) .then(response => response.json()) // 新增这行解析响应体 .then(data => console.log(data)) .catch(error => console.error(error))
内容的提问来源于stack exchange,提问作者artooras
相关产品推荐
相关产品推荐

