[英]Handling one hour token expiration in Firebase generated from iOS used for node auth
我的申请流程:
通过iOS登录Firebase。 检索firebase令牌并存储在钥匙串中-
FIRAuth.auth()?.currentUser?.getTokenWithCompletion({ (token, err) in
//store token in keychain
})
此令牌在标头中发送到我的节点服务器以验证请求-
firebase.auth().verifyIdToken(firebaseAccessToken).then(function(decodedToken) {
//allow access to api
}
令牌将在一个小时后失效。 我的问题是我应该如何处理?
还是这里还有其他选择?
手动将令牌存储在钥匙串上,可以有效解决(并错误地重新实现)Firebase SDK提供的行为。 首先,您不应该这样做。
然后,第二个选项是最干净的:每次在调用后端服务之前都调用getTokenWithCompletion
。 这是一个便宜的电话,因为它只会在令牌过期时刷新令牌。
在使用Firebase 5的iOS应用中,我通过实现IDTokenDidChangeListener()处理Firebase身份验证令牌的60分钟过期。 侦听器在令牌到期时触发,然后getTokenID()返回刷新的令牌:
import FirebaseAuth
class UserAuthorizer {
var tokenChangeListener: IDTokenDidChangeListenerHandle?
...
...
...
// Create a listener for token expiration so the token can be renewed.
self.tokenChangeListener = Auth.auth().addIDTokenDidChangeListener() { (auth, user) in
if let user = user {
// Get the token, renewing it if the 60 minute expiration
// has occurred.
user.getIDToken { idToken, error in
if let error = error {
// Handle error
print("getIDToken error: \(error)")
return;
}
print("getIDToken token: \(String(describing: idToken))")
// Reauthorize Firebase with the new token: idToken
…
…
…
}
}
}
...
...
...
//
// Sign-Out Firebase.
//
func signOut() {
…
…
…
// Remove the token ID listenter.
guard let tokenListener = self.tokenChangeListener else { return }
Auth.auth().removeStateDidChangeListener(tokenListener)
self.tokenChangeListener = nil
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.