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不为空。谢谢您的回复!我明天会试试