当我使用重新加载功能时,Firebase Auth是否将我注销



我使用了firebase phone auth,经过验证,我想更新登录用户的配置文件详细信息。因此,我编写了一个云函数来实现这一点,然后在函数返回响应后调用user.reload()方法。但令我惊讶的是,我的应用程序在我的控制台上被注销了:

[错误:flutter/lib/ui_dart_state.cc(177(]未处理的异常:[firebase_auth/user令牌过期]用户的凭据不再有效。用户必须重新登录。

我做了一些研究,发现这是一种安全措施,所以我必须重新验证用户。

这就是我所做的:

Future<Response> updateUserprofile({context, name, email}) async{
User _user = _firebaseAuth.currentUser;
Response response = Response(success: false);
Provider.of<AuthenticationProvider>(context, listen: false).loading = true;
try{
HttpsCallableResult functionResponse  = await createUser.call({'displayName': name, 'email':email});
response.success = functionResponse.data['success'];
response.message = functionResponse.data['message'];

_user.reload();
AuthCredential credential = AuthCredential(providerId: PhoneAuthProvider.PROVIDER_ID, signInMethod: PhoneAuthProvider.PHONE_SIGN_IN_METHOD);
await user.reauthenticateWithCredential(credential);
Provider.of<AuthenticationProvider>(context, listen: false).loading = false;
return response;
}catch(e){
Provider.of<AuthenticationProvider>(context, listen: false).loading = false;
response.message = e.message;
return response;
}
}

但我的控制台上仍然出现同样的错误:

[错误:flutter/lib/ui_dart_state.cc(177(]未处理的异常:[firebase_auth/user令牌过期]用户的凭据不再有效。用户必须重新登录。

您正在更新用户的电子邮件。这将使Firebase ID令牌无效,如下所述:https://firebase.google.com/docs/auth/admin/manage-sessions.

这似乎是预期的行为,也在这里指出:Firebase Auth-更新用户后';的电子邮件,Firebase Auth注销用户。我知道这也是你想做的吗?

如果user.reload()返回该异常,那么如果您之前调用它,它仍然会返回:

AuthCredential credential = AuthCredential(providerId: PhoneAuthProvider.PROVIDER_ID, signInMethod: PhoneAuthProvider.PHONE_SIGN_IN_METHOD);
await user.reauthenticateWithCredential(credential);

也许您应该在重新加载用户之前重新进行身份验证?


我注意到的另一件事是,您使用createUser.call。既然您正在更新现有用户的凭据,为什么不使用updateUser(https://firebase.google.com/docs/auth/admin/manage-users#update_a_user)?

最新更新