Как запретить пользователю доступ к маршрутам, введя NamedRoute в URL - PullRequest
1 голос
/ 16 января 2020

Вопрос: title

Мне нужна какая-то проверка сеанса, например sessionId ?? index.html, я понятия не имею, как это сделать. Router.dashboardView и Router.loginView являются static const String, сгенерированными пакетом AutoRoute как namedRoute. Текущий код работает нормально, если я получаю к нему доступ из root, но я могу обойти его, если напишу имя маршрута непосредственно в URL.

Пример (root): https://webapp.web.app/ => автоматически дать мне https://webapp.web.app/# / loginView

Пример (записать имя маршрута на URL): https://webapp.web.app/# / dashboardView (в обход loginView)

Спасибо за любые ваши предложения и идеи.

Это мой текущий код,

main.dart:

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,
    );
  }
}

dashboard_view.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'),
      ),
    );
  }
}
...