如何在我的 flutter 应用程序中保持用户的登录会话打开?
How can I keep my user's login session open in my flutter application?
我的应用程序在用户登录后出现抖动,我希望会话保持打开状态。也就是说,如果用户打开应用程序,他会登录,如果他要关闭应用程序并稍后打开它,我希望他仍然处于登录状态,而不必重新输入他的凭据。
我找到了这个 flutter_session
库,但我不明白它是否适合我,或者只是让会话在一页与另一页之间保持活动状态
有几种方法可以做到这一点。您没有说明用于实现该目的的服务器。例如,如果您使用的是 firebase,您可以这样做:
class LoginScreenState extends State<LoginScreen> {
AuthService auth = AuthService();
@override
void initState() {
super.initState();
auth.getUser.then(
(user) {
if (user != null) {
Navigator.pushReplacementNamed(context, '/topics');
}
else {
//force to login page
}
},
);
}
您可以在 auth 中获取有关当前用户会话的信息。这是用户登录会话的完美入口点:https://firebase.flutter.dev/docs/auth/usage/
如果您不使用 firebase,此任务仍有多种选择。这是本地存储 SharedPreference 或 GetStorage,用于在本地存储数据(凭据),直到用户登录。每当用户注销时,我们将清除存储的数据。
访问这个包 https://pub.dev/packages/get_storage
当用户第一次登录时存储凭据,如
GetStorage box = GetStorage();
box.write('email',email.value);
用户退出时,清除数据
box.remove('email');
进一步,当用户启动应用程序时,我们将检查电子邮件密钥是否有值,然后重定向到主屏幕或登录屏幕。
if(box.read('email')!='' || box.read('email')!=null)
Get.to(HomeScreen());
else
Get.to(LoginScreen());
我的应用程序在用户登录后出现抖动,我希望会话保持打开状态。也就是说,如果用户打开应用程序,他会登录,如果他要关闭应用程序并稍后打开它,我希望他仍然处于登录状态,而不必重新输入他的凭据。
我找到了这个 flutter_session
库,但我不明白它是否适合我,或者只是让会话在一页与另一页之间保持活动状态
有几种方法可以做到这一点。您没有说明用于实现该目的的服务器。例如,如果您使用的是 firebase,您可以这样做:
class LoginScreenState extends State<LoginScreen> {
AuthService auth = AuthService();
@override
void initState() {
super.initState();
auth.getUser.then(
(user) {
if (user != null) {
Navigator.pushReplacementNamed(context, '/topics');
}
else {
//force to login page
}
},
);
}
您可以在 auth 中获取有关当前用户会话的信息。这是用户登录会话的完美入口点:https://firebase.flutter.dev/docs/auth/usage/
如果您不使用 firebase,此任务仍有多种选择。这是本地存储 SharedPreference 或 GetStorage,用于在本地存储数据(凭据),直到用户登录。每当用户注销时,我们将清除存储的数据。 访问这个包 https://pub.dev/packages/get_storage 当用户第一次登录时存储凭据,如
GetStorage box = GetStorage();
box.write('email',email.value);
用户退出时,清除数据
box.remove('email');
进一步,当用户启动应用程序时,我们将检查电子邮件密钥是否有值,然后重定向到主屏幕或登录屏幕。
if(box.read('email')!='' || box.read('email')!=null)
Get.to(HomeScreen());
else
Get.to(LoginScreen());