用户总是被重定向到主页而不是请求的页面
User always being redirected to Home page instead of requested page
在我的 Angular 项目中,用户正在使用库 angular-auth-oidc-client 通过 OIDC 提供商进行身份验证。因此,当用户未通过身份验证或会话过期并请求类似 https://localhost:4202/account 的页面时,用户将被重定向到 OIDC 登录页面,并且在成功登录后,用户总是被重定向到主页而不是请求的页面
复制:
重现该行为的步骤:
- 用您自己的配置替换 Auth 配置
- 运行项目
npm run start
- 转到 https://localhost:4202/account。它将重定向到 OIDC 登录页面,然后在成功登录后将用户重定向到 https://localhost:4202 而不是 https://localhost:4202/account
问题是没有将 redirectedUrl
存储在存储器中并在成功导航后将其取回。该库已经有 AutoLoginPartialRoutesGuard
可用于自定义守卫。请参阅 Github 中的源代码和下面扩展 AutoLoginPartialRoutesGuard
的示例管理守卫。这将确保用户重定向回原始 URL
Admin Auth Guard:
@Injectable({
providedIn: 'root',
})
export class AdminUserAuthGuard implements CanActivate {
constructor(
private router: Router,
private autoLoginPartialRoutesGuard: AutoLoginPartialRoutesGuard
) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.autoLoginPartialRoutesGuard.canActivate(route, state) && this.currentUserState.hasSysAdminRole) {
return true;
}
if (this.autoLoginPartialRoutesGuard.canActivate(route, state) && !this.currentUserState.hasSysAdminRole) {
this.router.navigate(['/unauthorized']);
}
return false;
}
}
在我的 Angular 项目中,用户正在使用库 angular-auth-oidc-client 通过 OIDC 提供商进行身份验证。因此,当用户未通过身份验证或会话过期并请求类似 https://localhost:4202/account 的页面时,用户将被重定向到 OIDC 登录页面,并且在成功登录后,用户总是被重定向到主页而不是请求的页面
复制:
重现该行为的步骤:
- 用您自己的配置替换 Auth 配置
- 运行项目
npm run start
- 转到 https://localhost:4202/account。它将重定向到 OIDC 登录页面,然后在成功登录后将用户重定向到 https://localhost:4202 而不是 https://localhost:4202/account
问题是没有将 redirectedUrl
存储在存储器中并在成功导航后将其取回。该库已经有 AutoLoginPartialRoutesGuard
可用于自定义守卫。请参阅 Github 中的源代码和下面扩展 AutoLoginPartialRoutesGuard
的示例管理守卫。这将确保用户重定向回原始 URL
Admin Auth Guard:
@Injectable({
providedIn: 'root',
})
export class AdminUserAuthGuard implements CanActivate {
constructor(
private router: Router,
private autoLoginPartialRoutesGuard: AutoLoginPartialRoutesGuard
) {}
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.autoLoginPartialRoutesGuard.canActivate(route, state) && this.currentUserState.hasSysAdminRole) {
return true;
}
if (this.autoLoginPartialRoutesGuard.canActivate(route, state) && !this.currentUserState.hasSysAdminRole) {
this.router.navigate(['/unauthorized']);
}
return false;
}
}