【发布时间】:2021-09-16 09:22:11
【问题描述】:
这可能是一个新手问题(我之前没有使用过fetch api),但我无法弄清楚我的请求有什么问题。
fetch('https://securetoken.googleapis.com/v1/token?key=' + API_KEY, {
method: 'POST',
headers: {'Content-Type': 'application/x-www-form-urlencoded'},
body: 'grant_type=refresh_token&refresh_token=' + refreshToken
})
.then(response => console.log(response))
.catch(error => console.error(error))
我正在尝试按照 here 的指导原则将刷新令牌换成 id 令牌,但由于某种原因,我收到了 Bad Request 响应...
Response { type: "cors", url: "https://securetoken.googleapis.com/v1/token?key=[API_KEY]", redirected: false, status: 400, ok: false, statusText: "Bad Request", headers: Headers, body: ReadableStream, bodyUsed: false }
我的key 是正确的,refreshToken 也直接来自 Firebase SDK 上服务的响应。
我的错误到底在哪里?
更新
- 显示在 Next.js 应用程序中执行 fetch 的上下文:
- 我正在使用 Firebase 模拟器在 dev (localhost) 中运行此代码。
- 我设法找到了声明
{ code: 400, message: "INVALID_REFRESH_TOKEN", status: "INVALID_ARGUMENT" }的其他错误日志。
所以,这似乎确实是 refresh_token 的问题。可能是因为它是由 Firebase Emulators 发出的吗?
useEffect(() => {
return firebase.auth().onIdTokenChanged(async user => {
if (user) {
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 => console.log(response))
.catch(error => console.error(error))
}
})
}, [])
【问题讨论】:
-
乍一看似乎很奇怪的是错误返回
url: "https://securetoken.googleapis.com/v1/token?key=API_KEY"而不是url: "https://securetoken.googleapis.com/v1/token?key=[THE_REAL_API_KEY_VALUE]"。写问题之前你自己改了吗? -
对不起,只是我这样编辑了真正的密钥...现在将其更改为
[API_KEY]以使其更清晰。 -
“refreshToken 也直接来自 Firebase SDK 上服务的响应。” => 你能提供更多细节吗?您具体调用哪种 SDK 方法?
-
firabase.auth().onIdTokenChanged(user => { const {refreshToken} = user }) -
是的,这很可能是原因
标签: javascript firebase google-api fetch token