【问题标题】:How to create an Authentication middleware for a Flutter app?如何为 Flutter 应用创建身份验证中间件?
【发布时间】:2022-01-16 05:09:03
【问题描述】:

这是我的home.dart 代码,我想为我的应用程序编写一个身份验证中间件。目前我的main.dart 代码如下所示:

void main() {
  Get.put(MenuController());
  Get.put(NavigationController());
  Get.put(AuthController());
  Get.put(AuthCard);
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Obx(() => GetMaterialApp(
          initialRoute: AuthController.instance.isAuth
              ? homeScreenRoute
              : authenticationScreenRoute,
          unknownRoute: GetPage(
              name: '/not-found',
              page: () => PageNotFound(),
              transition: Transition.fadeIn),
          getPages: [
            GetPage(
                name: rootRoute,
                page: () {
                  return SiteLayout();
                }),
            GetPage(
                name: authenticationScreenRoute,
                page: () => const AuthenticationScreen()),
            GetPage(name: homeScreenRoute, page: () => const HomeScreen()),
          ],
          debugShowCheckedModeBanner: false,
          title: 'BasicCode',
          theme: ThemeData(
            scaffoldBackgroundColor: light,
            textTheme: GoogleFonts.mulishTextTheme(Theme.of(context).textTheme)
                .apply(bodyColor: Colors.black),
            pageTransitionsTheme: const PageTransitionsTheme(builders: {
              TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
              TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(),
            }),
            primarySwatch: Colors.blue,
          ),
        ));
  }
}

我在代码的initialRoute 部分检查的isAuth 变量来自以下代码行,位于扩展GetXControllerauth_controller 文件内:

final _isAuth = false.obs;

bool get isAuth {
 _isAuth.value= token != null;
 return _isAuth.value;
}

  String? get token {
    if (_expiryDate != null &&
        _expiryDate!.isAfter(DateTime.now()) &&
        _token != null) {
      return _token;
    }
    return null;
  } 

一切似乎都很好,但应用程序停留在身份验证页面,并且在 isAuth 的值更改为 true 后不会移动到主屏幕!

我进行了搜索,并通过创建身份验证中间件找到了另一种方法。所以我在main.dart文件中的上面的代码下面添加了以下代码:

class AuthMiddlware extends GetMiddleware {
  @override
  RouteSettings? redirect(String route) => !AuthController.instance.isAuth
      ? const RouteSettings(name: authenticationScreenRoute)
      : null;
}

但是我在redirect 字下得到一条红线,没有错误描述,不知道如何完成中间件并使其工作?

【问题讨论】:

    标签: authentication middleware flutter-getx react-state-management obs


    【解决方案1】:

    复制粘贴:)

    class AuthMiddlware extends GetMiddleware {
          @override
          RouteSettings? redirect(String? route) => !AuthController.instance.isAuth
              ? const RouteSettings(name: authenticationScreenRoute)
              : null;
        }
    

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2019-04-03
    • 2017-02-17
    • 2022-01-16
    • 1970-01-01
    • 2019-11-21
    • 2015-10-01
    • 2011-01-10
    • 1970-01-01
    • 2019-11-22
    相关资源
    最近更新 更多