Firebase重新身份验证不适用于电话身份验证

时间:2020-11-11 18:17:45

标签: firebase flutter firebase-authentication

我了解Firebase团队会在任何敏感数据更新时将用户注销,以作为一项安全措施,因此必须重新验证用户身份。使用其他身份验证方法,我可以简单地要求用户输入密码以更新其电子邮件。但是使用电话验证是不可能的。

所以我使用生成了一个认证凭据

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

在我这样调用auth实例的当前用户之前

await _user.reauthenticateWithCredential(credential);

_user.reload();

但这仍然使我的用户注销,并要求该用户再次登录。

错误:

[错误:flutter / lib / ui / ui_dart_state.cc(177)]未处理的异常:[firebase_auth / user-token-expired]用户的凭证不再有效。用户必须再次登录。

这是我的完整代码

 Future<Response> updateUserprofile({context, String name,String 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, 'phoneNumber': _user.phoneNumber});
      response.success = functionResponse.data['success'];
      response.message = functionResponse.data['message'];

      _user.updateProfile(displayName: name);
      _user.updateEmail(email);

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

      _user.reload();

      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;
    }
  }

0 个答案:

没有答案