当互联网连接丢失时,Flutter 使用 google 登录会丢失身份验证,如何重新身份验证?

问题描述 投票:0回答:2

我们目前正在构建一个仅需要 google 登录并根据登录时获得的数据与 Firebase 进行通信的应用程序。

问题是这样的;登录应用程序后,如果用户丢失互联网连接,然后在不关闭应用程序的情况下重新建立该连接,FirebaseAuth.currentUser不为空,但同时用户未经过身份验证,因此我需要通信的功能与数据库不起作用。

我的问题很简单;

我如何检查身份验证,然后重新对用户进行身份验证。

我的登录方法如下,每次用户进入某些特定页面时我都尝试重新登录,但这看起来不太好,但确实解决了问题。有没有优化的方法?

Future<String> signInWithGoogle() async {
    // Trigger the authentication flow
    final GoogleSignInAccount? googleUser = await _googleSignIn!.signIn();

    // Obtain the auth details from the request
    final GoogleSignInAuthentication? googleAuth =
        await googleUser!.authentication;

    // Create a new credential
    final GoogleAuthCredential credential = (GoogleAuthProvider.credential(
      accessToken: googleAuth!.accessToken,
      idToken: googleAuth.idToken,
    ) as GoogleAuthCredential);

    // Once signed in, return the UserCredential
    final UserCredential? authResult =
        await _auth!.signInWithCredential(credential);
    final User? user = authResult!.user;

    //assert(user!.isAnonymous);
    assert(await user!.getIdToken() != null);

    final User? currentUser = _auth!.currentUser;
    assert(user!.uid == currentUser!.uid);

    return 'signInWithGoogle succeeded: $user';
  }

编辑:

我们使用connectivity_plus插件,因此我们为其创建了一个侦听器,如果用户更改其与wifi或移动设备的连接,我们只需重新登录即可。它对我们有用,也许对你也有用;

@override
 void initState() {
   subscription = Connectivity()
       .onConnectivityChanged
       .listen((ConnectivityResult result) {
     if (result == ConnectivityResult.mobile ||
         result == ConnectivityResult.wifi ||
         result == ConnectivityResult.ethernet) {
       Login().signInWithGoogle();
     }
     print("${result}");
   });
   // TODO: implement initState
   super.initState();
 }
 dispose() {
   super.dispose();

   subscription.cancel();
 }
firebase flutter dart firebase-authentication
2个回答
0
投票

Flutter Firebase 文档有一个重新验证用户选项,听起来与您的情况非常相似。

重新验证用户身份


0
投票

我也面临同样的问题,请帮忙

© www.soinside.com 2019 - 2024. All rights reserved.