我们想在Angular 2中开发一个身份验证保护。我们可以导航/重定向到任何登录URL吗?

时间:2016-08-31 21:40:26

标签: angularjs guard

我们可以导航/重定向到任何登录网址(不同的主机和应用程序),还是我们必须导航/重定向到我们应用程序路径中的网址?

角度网站的示例表明只允许应用程序路由:

canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
  if (this.authService.isLoggedIn) { return true; }

  // Store the attempted URL for redirecting
  this.authService.redirectUrl = state.url;

  // Navigate to the login page
  this.router.navigate(['/login']);
  return false;
}

1 个答案:

答案 0 :(得分:1)

您是否尝试过navigateByUrl()?

有关用法,请参阅https://angular.io/docs/ts/latest/api/router/index/Router-class.html

但: 为什么您需要一个不属于您的应用程序的“外部”URL? 我认为最好的实际操作是外部authService而不是单独的“Login-Page-Application”。或者这样。

e.g。

  $('.main').has('p:contains(' + deleteName + ')').remove();
//$('.main').has('p:contains(name2)').remove();
//Searching for text: name2

import { Injectable }     from '@angular/core';
import {CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot, Router}    from '@angular/router';
import {Observable} from "rxjs";
import {AuthService} from "../services/auth.service";

@Injectable()
export class LoginGuard implements CanActivate {

  constructor(protected router: Router, protected authService: AuthService) { }

  canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): Observable<boolean> | boolean {
    console.log('AuthGuard#canActivate called');

    if (state.url !== '/login' && !this.authService.isLoggedIn()) {
      this.router.navigate(['/login'], {queryParams: {redirectTo: state.url}});
      return false;
    }

    return true;
  }
}