我希望我的应用程序在用户登录时将其重定向到根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 });
}
我觉得这里缺少明显的东西。