我正在使用强大的自定义后端部分进行应用程序开发,其中每个API请求调用在标头中都包含Firebase身份验证令牌。在测试过程中,我们意识到令牌始终会收到两次。
我使用了与Firebase示例项目中所述相同的逻辑。为确保这不是我的错,我检查了干净的示例项目,结果仍然相同-以某种方式在登录时两次调用OnIdTokenChanged。两个回调都包含正确的令牌。 我正在使用Unity 2018.3.5f1,.NET 4.5和Firebase SDK v.5.4.4
以下是一些代码示例:
public virtual void Start() {
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
dependencyStatus = task.Result;
if (dependencyStatus == Firebase.DependencyStatus.Available) {
InitializeFirebase();
} else {
Debug.LogError(
"Could not resolve all Firebase dependencies: " + dependencyStatus);
}
});
}
protected void InitializeFirebase() {
DebugLog("Setting up Firebase Auth");
auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
auth.StateChanged += AuthStateChanged;
auth.IdTokenChanged += IdTokenChanged;
}
void IdTokenChanged(object sender, System.EventArgs eventArgs) {
Firebase.Auth.FirebaseAuth senderAuth = sender as Firebase.Auth.FirebaseAuth;
if (senderAuth == auth && senderAuth.CurrentUser != null && !fetchingToken) {
senderAuth.CurrentUser.TokenAsync(false).ContinueWith(
// THIS CALLED TWICE
task => DebugLog(String.Format("Token = {0}", task.Result)));
}
}
一些重要的应用逻辑基于令牌接收事件,该事件仅应接收一次,并且一次登录就获得2个令牌是完全不正确的。
是错误还是预期的行为?如果存在错误,在其他平台(例如iOS / Android本机)上是否存在相同的行为,或者仅仅是Unity3d问题?
答案 0 :(得分:0)
我希望第一次调用将在附加侦听器之后立即发生,在这种情况下,这是从应用程序的缓存中获取的本地令牌。第二次是客户端与服务器一起验证令牌仍然有效或刷新ID令牌之后。
来自documentation on the IDTokenChanged
event:
身份验证ID令牌更改为:
- 用户登录时
- 当前用户退出时
- 当前用户更改时
- 当前用户的令牌发生更改