【问题标题】:Flutter: How to handle screens that require authentication?Flutter:如何处理需要身份验证的屏幕?
【发布时间】:2018-05-27 21:50:36
【问题描述】:

我正在构建一个 Flutter 应用程序,其中一些屏幕可以显示给匿名用户,而其他屏幕需要用户登录。

对于经过身份验证的屏幕,如果用户未登录,它们应该自动导航到(推送)登录屏幕。用户会话可以随时到期,如果用户正在查看这些经过身份验证的屏幕之一,那么登录屏幕应该在那个时候立即显示。

在 Flutter 中,如何实现在用户未通过身份验证时自动导航到/从登录屏幕的经过身份验证的屏幕的概念?

【问题讨论】:

    标签: android ios login navigation flutter


    【解决方案1】:

    目前,与 Authentification 和 Authentified 路由无关。 问题是 dart:mirror 被禁用,这会阻止执行更自动化的解决方案。

    你可以试试:

    • 将匿名路由放入 MaterialApproutes 属性中
    • 将经过身份验证的路由放入 MaterialApponGenerateRoute 属性中

    并确保在onGenerateRoute 中用户已登录。如果他是,建立那条路线。如果没有,则构建 Login 路由,并将原始目标作为参数传递(稍后重定向到该页面)

    代码生成器也可能是一个很好的解决方案;虽然更复杂。

    【讨论】:

      【解决方案2】:

      有一个非常好的软件包auto_route 用于颤振。

      它为您提供了为Authenticated 路由实现Route Guards 的强大功能。

      我鼓励你使用最新版本的库(这次我写的答案https://pub.dev/packages/auto_route/versions/1.0.0-beta.8是最新的)

      该文档具有误导性,但 https://github.com/Milad-Akarie 正在积极开发该库,并在 GitHub 上的 Issues 选项卡下回答任何问题。

      有一个示例解决方案:https://github.com/Milad-Akarie/auto_route_library/tree/master/example

      AppRouter.dart

      ...
      AutoRoute(path: RoomPage.path, guards: [AuthGuard],page: RoomPage),
      ...
      

      AuthGuard.dart

      class AuthGuard extends AutoRouteGuard {
        @override
        Future<bool> canNavigate(
            List<PageRouteInfo> pendingRoutes, StackRouter router) async {
          bool isAuthenticated = await checkUserAccess();
          if (!isAuthenticated) {
            router.root.push(LoginRoute(onLoginResult: (success) {
              if (success) {
                router.replaceAll(pendingRoutes);
              }
            }));
      
            return false;
          }
      
          return true;
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-24
        • 2015-10-01
        • 2021-10-10
        • 2021-07-11
        • 2019-09-30
        • 1970-01-01
        • 2017-07-02
        相关资源
        最近更新 更多