Reputation: 1
Well, in my application it uses riverpod and autoroute and unfortunately I have a problem with guard here. I would like my app to display DashboardPage if isAuthenticated == true and WelcomePage otherwise. Unfortunately, after I try to log out and redirect to SignInPage by some miracle my guard gets trigged for DashboardPage as a result instead of redirecting me to SignIn it gets redirected to Welcome (because at that time isAuthenticated = false). What am I doing wrong?
AppRouter class
AppRouter appRouter(AppRouterRef ref) => AppRouter(ref);
@AutoRouterConfig()
class AppRouter extends RootStackRouter {
final Ref ref;
AppRouter(this.ref);
@override
List<AutoRoute> get routes => [
AutoRoute(page: DashboardRoute.page, initial: true, guards: [AuthGuard(ref)]),
AutoRoute(page: TempRoute.page),
AutoRoute(page: WelcomeRoute.page),
AutoRoute(page: SignInRoute.page),
AutoRoute(page: SignUpRoute.page),
AutoRoute(page: ForgotPasswordRoute.page),
AutoRoute(page: SuccessfulPasswordResetRequestRoute.page),
AutoRoute(page: NewPasswordRoute.page),
AutoRoute(page: ProfileRoute.page, guards: [AuthGuard(ref)]),
AutoRoute(page: QuizzCreationRoute.page, guards: [AuthGuard(ref)]),
AutoRoute(page: QuizzDetailsRoute.page, guards: [AuthGuard(ref)]),
];
}
AuthGuard class
class AuthGuard extends AutoRouteGuard {
final Ref ref;
AuthGuard(this.ref);
@override
void onNavigation(NavigationResolver resolver, StackRouter router) async {
final isAuthenticated = await ref.read(sessionProvider).isAuthenticated();
print('Guard triggered for route: ${resolver.route.name}');
print('isAuthenticated: $isAuthenticated');
if (isAuthenticated) {
resolver.next(true);
} else {
resolver.redirect(const WelcomeRoute());
}
}
}
And anytime i want redirect to SignInPage or any other like this:
if (state == const AuthState.success()) {
context.router.replaceAll([const SignInRoute()]);
}
It triggers somehow AuthGuard
flutter: Guard triggered for route: DashboardRoute
flutter: isAuthenticated: true
flutter: Guard triggered for route: ProfileRoute
flutter: isAuthenticated: true
flutter: Guard triggered for route: DashboardRoute
flutter: isAuthenticated: false
And redirects me to WelcomePage
Upvotes: 0
Views: 211