我有一个使用Expo.Google.logInAsync
通过Google登录的React Native应用。这会返回accessToken
(1小时后过期)和refreshToken
。
我将此accessToken
传递给Firebase Web SDK:
const cred = firebase.auth.GoogleAuthProvider.credential(null, accessToken);
await firebase.auth().signInWithCredential(cred).catch(console.error);
const idToken = await firebase.auth().currentUser.getIdToken(true).catch(console.error);
我应该如何使用此Google refreshToken
保持Firebase idToken
有效并在一小时后登录?
我是否应该在下面提出请求并重新重新启动Firebase signInWithCredential
?
https://developers.google.com/identity/protocols/OAuth2WebServer#exchange-authorization-code
POST /oauth2/v4/token HTTP/1.1
Host: www.googleapis.com
Content-Type: application/x-www-form-urlencoded
client_id=<your_client_id>&
client_secret=<your_client_secret>&
refresh_token=<refresh_token>&
grant_type=refresh_token
我可以从Google API凭据页面获取client_secret
。如果可能的话,大多数人会说要将它保留在服务器上,但有些人说如果需要,你也可以将它嵌入到客户端代码中。
client_secret
是否设计用于手机应用中的客户端代码?
答案 0 :(得分:2)
Firebase会话无限期。 Firebase Auth在登录后返回ID令牌和刷新令牌,每次ID令牌到期时,刷新令牌用于获取新的ID令牌。客户端SDK将自行处理刷新。您只需调用getIdToken()
,它将返回缓存的ID令牌(如果未过期)或使用基础刷新令牌检索新令牌。此处不需要您引用的Google OAuth刷新令牌。
答案 1 :(得分:0)
要澄清一下,现在无法通过Firebase Auth流程刷新Google OAuth令牌吗?