【发布时间】:2021-10-11 08:11:19
【问题描述】:
我有一个带有命名路由的 GetMaterialApp,可在 Flutter Web 中用于仪表板项目。但是,我正在努力检查用户是否经过身份验证并根据身份验证状态重定向用户。这是我的应用代码:
GetMaterialApp(
initialBinding: InitialBinding(),
debugShowCheckedModeBanner: false,
theme: CustomTheme().getLightTheme,
themeMode: ThemeMode.light,
title: "----------",
initialRoute: "/login",
unknownRoute: GetPage(name: "/notfound", page: () => NotFoundPage()),
getPages: [
GetPage(name: "/login", page: () => Root()),
GetPage(name: "/dashboard", page: () => Dashboard()),
],
),
我正在使用GetX 来处理身份验证状态。因此,我可以访问整个 Web 应用程序的身份验证状态。 Root 小部件包含一个简单的Obx,用于检查身份验证状态并将用户发送到仪表板:
return Obx(() => (Get.find<AuthController>().loggedIn) ? Dashboard() : LoginScreen());
遗憾的是,这并不能解决问题,因为 url 不会改变,只是内容会改变。 url 保留在 /login。
当用户登录时,我可以简单地调用Get.toNamed("dashboard"),但是仪表板页面会暴露给该url,即使他没有登录,用户也可以访问/dashboard url。
我也不想在我创建的每个小部件或页面中创建一个检查,因为那样会效率低下。有没有办法检查用户是否登录,如果没有,将用户重定向到每个输入的 url 的登录页面?
例子:
- 如果用户未登录,www.adress.com/dashboard 将重定向到 www.adress.com/login
有没有办法使用GetX 来检查身份验证状态并相应地重定向用户?
旁注:我能够每次都获得正确的身份验证状态,这不是问题,因为我使用的是 GetX。
简短摘要: 是否可以检查实际小部件之外的身份验证状态(例如在 GetMaterialApp 中)并将任何未经身份验证的用户重定向到登录页面,即使他们输入 /dashboard url?
【问题讨论】:
-
可以使用GetX中间件:pub.dev/packages/get#getpage-middleware
标签: firebase flutter web flutter-web flutter-getx