首页 > 解决方案 > 如何通过在 URL 中键入 NamedRoute 来防止用户访问路由

问题描述

问:

我需要某种会话检查,例如sessionId ?? index.html,我不知道该怎么做。Router.dashboardView并由AutoRoute 包Router.loginViewstatic const String成为namedRoute。如果我从 root 访问当前代码,它可以正常工作,但如果我直接在 Url 上写路由名称,我可以绕过它。

示例(根):https ://webapp.web.app/ => 自动给我https://webapp.web.app/#/loginView

示例(在 Url 上写入路由名称):https ://webapp.web.app/#/dashboardView(绕过 loginView)

感谢您的任何建议和想法。

这是我当前的代码,

主要飞镖:

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool isLogin;
  String initialRoute;

  @override
  void initState() {
    super.initState();
    initialRoute = checkSession();
  }

  String checkSession() {
    isLogin = WebStorage.instance.sessionId != null;

    return isLogin ? Router.dashboardView : Router.loginView;
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      initialRoute: initialRoute,
      onGenerateRoute: Router.onGenerateRoute,
      navigatorKey: Router.navigatorKey,
    );
  }
}

仪表板视图.dart:

class DashboardView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('DashboardView'),
      ),
    );
  }
}

login_view.dart:

class LoginView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('LoginView'),
      ),
    );
  }
}

标签: sessionflutterdartflutter-webhummingbird

解决方案


推荐阅读