当我使用重新加载功能时,Firebase Auth 会注销我吗?
Posted
技术标签:
【中文标题】当我使用重新加载功能时,Firebase Auth 会注销我吗?【英文标题】:Does Firebase Auth Log me out when I use the reload function? 【发布时间】:2021-02-15 01:28:41 【问题描述】:我使用了 Firebase 手机身份验证,验证后,我想更新登录用户的个人资料详细信息。所以我写了一个云函数来做这件事,然后在函数返回响应后调用user.reload()
方法。但令我惊讶的是,我的应用程序在我的控制台上被注销了:
[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:[firebase_auth/user-token-expired] 用户的凭据不再有效。用户必须重新登录。
我做了一些研究,发现这是一种安全措施,所以我不得不重新验证用户身份。
这就是我所做的:
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;
但我的控制台上仍然出现同样的错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(177)] 未处理的异常:[firebase_auth/user-token-expired] 用户的凭据不再有效。用户必须重新登录。
【问题讨论】:
【参考方案1】:您正在更新用户的电子邮件。这会使 Firebase ID 令牌失效,如下所述:https://firebase.google.com/docs/auth/admin/manage-sessions。
这似乎是这里也指出的预期行为:Firebase Auth - After updating the user's email, Firebase Auth logs out the user。我知道这也是你想要做的?
如果 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)?
【讨论】:
我在重新加载之前重新验证了用户身份,它第一次工作但它不再工作了。我仍然遇到同样的问题以上是关于当我使用重新加载功能时,Firebase Auth 会注销我吗?的主要内容,如果未能解决你的问题,请参考以下文章
当我更新 ListView 上的列表时,Flutter 页面不会重新加载
如何在反应应用程序中重新加载每个页面时停止 firebase re-auth()?
如何在不请求的情况下在firebase-auth中首次加载时获取currentUser
每次页面重新启动时,Firebase.auth().currentUser 都会变为 null
Firebase Auth State Persistence ELECTRON loadFILE vs loadURL