我可以在网络中使用 Firebase Auth 正确登录和注册。
当我热重新加载页面时,用户信息将保持不变并且他们保持登录状态。
但是,如果我使用 Chrome 刷新页面,用户将变为空,我需要再次登录。
认证服务:
static Future<User?> signInUsingEmailPassword(
{required String email,
required String password,
required BuildContext context}) async {
FirebaseAuth auth = FirebaseAuth.instance;
User? user;
try {
UserCredential userCredential = await auth.signInWithEmailAndPassword(
email: email,
password: password,
);
user = userCredential.user;
} on FirebaseAuthException catch (e) {
if (e.code == 'user-not-found') {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Usuário não encontrado.'), duration: Duration(seconds: 4),));
} else if (e.code == 'wrong-password') {
ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Senha inválida.'), duration: Duration(seconds: 4),));
}
}
return user;
}
主要.dart:
body: FutureBuilder(future: _initialization, builder: (context, snapshot){
if(snapshot.hasError){
return const Center(child: Text('Houve algum erro. Tente novamente'),);
}
if(snapshot.connectionState == ConnectionState.done){
print('usuário: $user');
print('emailVErified: ${user?.emailVerified}');
if(user == null || user?.emailVerified == false){
return const AuthenticationPage();
}
if (user != null && user?.emailVerified == true) {
return const HomePage();
}
}
return const Center(child: CircularProgressIndicator(),);
},),
这是预期的行为。 Firebase 在用户登录时存储用户凭据,然后在页面(或应用)重新加载时恢复它们。然而,这需要它调用服务器,例如检查帐户是否被禁用,并且当此调用正在进行时,您的代码继续运行并且currentUser
is null
.
要在恢复登录(或恢复失败)时正确接收,您需要实现一个身份验证状态侦听器,如文档中的第一个片段所示获取当前用户:
FirebaseAuth.instance
.authStateChanges()
.listen((User? user) {
if (user != null) {
print(user.uid);
}
});
所以你可以listen
到 auth 状态,或者你可以将它包装在StreamBuilder
在你的build
方法让您的 UI 响应所有身份验证状态更改。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)