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

Flatter Firebase检查用户是否匿名登录,firebase,flutter,authentication,Firebase,Flutter,Authentication,我为用户提供了通过电子邮件和密码或匿名登录的选项 使用电子邮件和密码创建和登录用户可以正常工作,但我在为匿名登录用户显示不同内容时遇到问题 我就是这样创建它们的: final _auth = FirebaseAuth.instance; // Create Anonymous User Future signInAnonymously() { // return _auth.signInAnonymously(); _auth.signInAnonymously()

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

使用电子邮件和密码创建和登录用户可以正常工作,但我在为匿名登录用户显示不同内容时遇到问题

我就是这样创建它们的:

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(),
  ),
);
}

我正在使用未来的生成器/流来侦听main.dart中的身份验证更改:

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();
                    }),
          );
        });
  }
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
最终未来_initialization=Firebase.initializeApp();
回归未来建设者(
//火警:
未来:_初始化,
生成器:(上下文,appSnapshot){
返回材料PP(
debugShowCheckedModeBanner:false,
标题:“myapp”,
主页:appSnapshot.connectionState!=connectionState.done
?防溅屏()
:StreamBuilder(
流:FirebaseAuth.instance.authStateChanges(),
生成器:(ctx,用户快照){
如果(userSnapshot.connectionState==
连接状态(正在等待){
返回屏幕();
}
if(userSnapshot.hasData){
返回主屏幕();
}
返回AuthScreen();
}),
);
});
}
}

我尝试在SubmitOn()中向主屏幕传递一个“isAnon=true”布尔值,但一旦用户重新打开应用程序,他就会从main.dart进入应用程序,所有通过电子邮件注册的用户也会进入。如果用户通过匿名身份验证来构建我的widget,有没有一种好的方法来检查应用程序内部?e、 g.显示身份验证选项,而不是仅针对电子邮件和密码用户的实际内容?

我建议您使用
SharedReferences
,以跟踪用户是否匿名。您只需将
isAnon
存储在共享首选项中,即可跟踪用户是否为匿名用户,然后您可以使用
Provider
在整个应用程序中检索
isAnon
值。通过这两件事的结合,你应该能够创造出你想要的行为


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

检查用户是否匿名登录firebase。返回的Firebase用户类有一个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不为空。

谢谢您的回复!我明天会试试