firebase - 为什么它不让用户保持登录状态
问题描述
用户是否登录并不重要,它会进入主页。anf 如果我每次重新启动应用程序时都将登录页面设为主页,则它需要再次登录。
我希望它就像一旦登录然后登录直到你注销
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(MaterialApp(
debugShowCheckedModeBanner: false,
home: await getLandingPage(),
routes: {
'upload': (context) => ItemInput(),
'suzuki': (context) => Suzuki(),
'others': (context) => Others(),
},
));
}
Future<Widget> getLandingPage() async {
final FirebaseAuth _auth = FirebaseAuth.instance;
return StreamBuilder<User>(
stream: _auth.authStateChanges(),
builder: (BuildContext context, snapshot) {
if (snapshot.hasData && (!snapshot.data.isAnonymous)) {
return MainPage();
}
return LoginPage();
},
);
}
解决方案
当应用启动时,Firebase 会自动恢复用户的身份验证状态。这可能需要一些时间,因为它需要与服务器检查帐户是否仍处于活动状态。
在此期间,用户将不会登录,因此authStateChanges()
会触发null
. 这就是您的代码将用户重定向到登录页面的时候。
您需要等待片刻以查看用户状态是否已恢复,或者将导航逻辑移动/复制到登录页面,以便在用户身份验证状态恢复后重定向到主页。
推荐阅读
- ios - 是否可以在我的 iOS swift 中将 App Tracking Tranparency 的默认值设置为 .denied
- xamarin - Xamarin Forms - 将函数绑定到 StackLayout TapGesture
- python - TypeError:timedelta days 组件不支持的类型:dict
- r - R 热图,将颜色更改为我想要的比例。热图
- jquery - 在新标签页中打开链接在 Safari iOS 上不起作用
- python - 无法使用 Django 表单保存数据
- ruby-on-rails - 用于graphql单元测试的未定义方法“并行化”
- reactjs - 当我调用 Sign 函数时发生此错误
- firebase - 如何测量 Firestore 响应时间?
- linux - 为什么我的 envsubst 命令只是插入空白字符串?