代码之家  ›  专栏  ›  技术社区  ›  user1961

如何从flutter退出google auth?

  •  0
  • user1961  · 技术社区  · 6 年前

    我能够成功地使用FireBase使用谷歌和Facebook登录用户:

    firebase_auth.dart,flutter_facebook_login.dart,google_sign_in.dart

    我可以从其他小部件使用此功能注销FireBase用户:

      Future<void>_signOut() async {
        final FirebaseAuth _firebaseAuth = FirebaseAuth.instance;
        return _firebaseAuth.signOut();
      }
    

    现在这是两种登录类型的全部捕获,google和facebook,我如何确定用户是否是google auth用户,在这种情况下,我可以执行

        final GoogleSignIn _googleSignIn = new GoogleSignIn();
    ...
        _googleSignIn.signOut();
    

    另外,如果我的注销函数在不同的小部件和文件中,我如何传递要被引用以注销的GoogleSignin对象?

    1 回复  |  直到 6 年前
        1
  •  1
  •   satish    6 年前

    googlesignin和facebooksignin有bool未来类型的方法。

    final facebookLogin = FacebookLogin();
    final GoogleSignIn googleSignIn = new GoogleSignIn();
         googleSignIn.isSignedIn().then((s) {});
          facebookLogin.isLoggedIn.then((b) {});
    

    您将得到正确或错误使用这个您可以使用注销方法。 对于第二个问题,解决方案是为GoogleSignin和Facebook创建一个全局对象。

    import 'dart:async';
    import 'package:firebase_auth/firebase_auth.dart';
    import 'package:google_sign_in/google_sign_in.dart';
    import 'package:flutter_facebook_login/flutter_facebook_login.dart';
    
    final facebookLogin = FacebookLogin();
    final FirebaseAuth firebaseAuth = FirebaseAuth.instance;
    final GoogleSignIn googleSignIn = new GoogleSignIn();
    
    Future<FirebaseUser> signInWithGoogle() async {
      // Attempt to get the currently authenticated user
      GoogleSignInAccount currentUser = _googleSignIn.currentUser;
      if (currentUser == null) {
        // Attempt to sign in without user interaction
        currentUser = await _googleSignIn.signInSilently();
      }
      if (currentUser == null) {
        // Force the user to interactively sign in
        currentUser = await _googleSignIn.signIn();
      }
    
      final GoogleSignInAuthentication googleAuth =
          await currentUser.authentication;
    
      // Authenticate with firebase
      final FirebaseUser user = await firebaseAuth.signInWithGoogle(
        idToken: googleAuth.idToken,
        accessToken: googleAuth.accessToken,
      );
    
      assert(user != null);
      assert(!user.isAnonymous);
    
      return user;
    }
    
    Future<Null> signOutWithGoogle() async {
      // Sign out with firebase
      await firebaseAuth.signOut();
      // Sign out with google
      await googleSignIn.signOut();
    }