我为用户提供了通过电子邮件和密码或匿名登录的选项。
使用电子邮件和密码创建和登录用户可以正常工作,但是我无法显示匿名登录用户的不同内容。
这是我创建它们的方式:
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内检查用户是否通过匿名身份验证来构建我的小部件?例如显示身份验证选项,而不是仅针对电子邮件和密码用户的实际内容?
答案 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)