1

我正在编写我的 Angular 5+ 应用程序并使用AuthGuardService我正在做的事情是我正在从另一个php应用程序重定向,该应用程序向我发送查询字符串中的表单数据

http://localhost:44200/#/users/save?first_name=John&last_name=Doe

AuthGuardService如果用户未使用以下代码登录,则正确重定向用户登录

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot){
    if(localStorage.getItem('crmUser')){
      return true;
    }
    this.router.navigate(['/login'], { queryParams: {returnUrl: state.url},queryParamsHandling: 'merge' });
    return false;
}

但是登录后如果没有查询字符串,我可以重定向到返回 url,我想将用户重定向到所有查询字符串的同一页面。

请指导我如何处理它。

4

1 回答 1

3

我就是这样做的。在您的 AuthGuard#canActivate 添加以下内容:

@Injectable()
export class AuthGuard implements CanActivate{

  originRoute:ActivatedRouteSnapshot;

  constructor(private authentificationService: AuthChecker,
              private router: Router){}

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | Promise<boolean> | boolean {
    if(localStorage.getItem('crmUser')){
       return true;
    }
    this.originRoute = route;
    this.router.navigate(['/login'], { queryParams: {returnUrl: state.url},queryParamsHandling: 'merge' });
    return false;


    }
  }

  public hasOriginRoute(): boolean{
    return this.originRoute != null;

  }
}

现在在登录成功时在您的 LoginComponent 中添加:

if(this.authGuard.hasOriginRoute()){
   this.router.navigate(this.authGuard.originRoute.url.map((x) => x.path));
}
于 2018-07-11T09:48:51.733 回答