Aurelia路由器:登录时重定向

时间:2018-07-06 20:04:41

标签: javascript navigation single-page-application aurelia aurelia-router

我希望我的应用程序在用户登录时将其重定向到根URL,而不考虑其原始查询。

例如,某用户在登录时尝试导航到http://localhost:4748/#/admin,则应将其重定向到http://localhost:4748/#/

现在他们要去管理。

身份验证后,我将根目录设置为我的shell组件。

main.js

aurelia.start().then(() => {
    let storageService = aurelia.container.get(StorageService);
    storageService.clear();

    let authService = aurelia.container.get(AuthService);
    let tokenService = aurelia.container.get(TokenService);
    let router = aurelia.container.get(Router);
    let userIsAuthenticated = authService.isAuthenticated();

    if (userIsAuthenticated) { 
        aurelia.setRoot("shell/shell");
    } else {
        logger.info("User is NOT authenticated.  Redirecting to Azure login.");
        tokenService.currentADApplication.logout();
        authService.login();
    }
});

...和我的路由器配置

shell.js

configureRouter(config, router) {
    let self = this;
    let appNavStep = {
        run(navigation: NavigationInstruction, next: Next): Promise<any> {
            self.logger.debug(`${navigation.fragment}`, { navigation });
            return next();
        },
    };

    let postAuthRedirect = {
        run(navigation: NavigationInstruction, next: Next): Promise<any> {
            return next();
        },
    };

    let authStep = {
        async run(navigation: NavigationInstruction, next: Next): Promise<any> {
            if (navigation.getAllInstructions().some((i) => i.config.auth)) {
                if (!self.authService.isAuthenticated()) {
                    return next.cancel(self.authService.login());
                } else {
                    let user = await self.userService.getCurrentUserInfo();
                    self.user = user;
                    await self.userService.getPermissions();
                    if (user.IsActive === false) {
                        return next.cancel(new Redirect("access-denied"));
                    }
                }

            }
            return next();
        },
    };

    config.addAuthorizeStep(authStep);
    config.addPreActivateStep(postAuthRedirect);
    config.addPreRenderStep(appNavStep);
    config.options.root = "/";
    config.mapUnknownRoutes({ redirect: "/" });
    this.router = router;
    config.map(routes);
}

我已经在main.js中进行身份验证后尝试路由到“ /”,但是我仍然以管理员身份结束。

if (userIsAuthenticated) {
        aurelia.setRoot("shell/shell");
        router.navigate('/', { replace: true, trigger: false });
}

我觉得这里缺少明显的东西。

0 个答案:

没有答案