Как запретить пользователю доступ к маршрутам, введя NamedRoute в URL-адрес

Вопрос: название

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

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

Пример (напишите имя маршрута в URL): https://webapp.web.app/ (в обход 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'),
      ),
    );
  }
}

0 ответов

Другие вопросы по тегам