Flutter Firebase检查用户是否匿名登录

时间:2020-11-10 20:54:49

标签: firebase flutter authentication

我为用户提供了通过电子邮件和密码或匿名登录的选项。

使用电子邮件和密码创建和登录用户可以正常工作,但是我无法显示匿名登录用户的不同内容。

这是我创建它们的方式:

final _auth = FirebaseAuth.instance;

    // Create Anonymous User
  Future signInAnonymously() {
    // return _auth.signInAnonymously();
    _auth.signInAnonymously();
  }

如果用户选择通过身份验证表单匿名进入应用程序,我将触发以下功能:

Future submitAnon() async {
await signInAnonymously();
Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => HomeScreen(),
  ),
);

}

我正在使用Future Builder / Stream在main.dart中监听Auth更改:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final Future<FirebaseApp> _initialization = Firebase.initializeApp();
    return FutureBuilder(
        // Initialize FlutterFire:
        future: _initialization,
        builder: (context, appSnapshot) {
          return MaterialApp(
            debugShowCheckedModeBanner: false,
            title: 'myapp',
            home: appSnapshot.connectionState != ConnectionState.done
                ? SplashScreen()
                : StreamBuilder(
                    stream: FirebaseAuth.instance.authStateChanges(),
                    builder: (ctx, userSnapshot) {
                      if (userSnapshot.connectionState ==
                          ConnectionState.waiting) {
                        return SplashScreen();
                      }
                      if (userSnapshot.hasData) {
                        return HomeScreen();
                      }
                      return AuthScreen();
                    }),
          );
        });
  }
}

我尝试过的是在SubmitAnon()中将“ isAnon = true”布尔值传递给HomeScreen,但是一旦用户重新打开应用程序,他就从main.dart进入该应用程序,所有在此注册的用户通过电子邮件也可以进入。是否有一种很好的方法可以在App内检查用户是否通过匿名身份验证来构建我的小部件?例如显示身份验证选项,而不是仅针对电子邮件和密码用户的实际内容?

2 个答案:

答案 0 :(得分:1)

检查用户是否匿名登录 Firebase。返回的 Firebase User 类有一个 isAnonymous() 方法,如果用户匿名登录,该方法将返回 true。 在您的代码中,您可以从 streambuilder 快照中获取 firebase 用户。并检查 isAnonymous 是否为真。如下图:

StreamBuilder(
                stream: FirebaseAuth.instance.authStateChanges(),
                builder: (ctx, userSnapshot) 
                         { 
                          User user = userSnapshot.data;
                          print('Is user anonymous: ${user.isAnonymous}');
                          },
                            );

应该打印

'Is user anonymous: true'

如果用户匿名登录并且 userSnapshot 不为空。

答案 1 :(得分:0)

我建议您使用SharedPreferences library来跟踪用户是否匿名。您应该只需将isAnon存储在“共享首选项”中即可跟踪用户是否匿名,然后您就可以使用Provider library来检索isAnon整个应用的价值。结合这两件事,您应该能够创建所需的行为。

如果我误解了您的问题或需要进一步的解释,请告诉我!