0

身份验证后,我将令牌存储在 localStorage 中,但每次刷新时我都需要将其删除并重定向到某个路由器。

我不知道如何在角度上做到这一点。我正在使用一种非常hacky的方式使用纯js。

window.addEventListener('load', function (e) {
  if (window.sessionStorage !== null && (window.location.href.indexOf('/signin') === -1 &&  window.location.href.indexOf('confirm-user') === -1)) {
    window.sessionStorage.clear();
    window.location.href = '/signin';
  }
});

我正在考虑添加一个身份验证保护,但我确信应该有一个更角度的方式来做到这一点。

4

1 回答 1

0

我建议创建一些身份验证服务来将您的令牌存储为普通变量和一个Guard,以防止重定向到没有令牌的安全页面。您可以在一项服务中实现它:

@Injectable()
export class AuthService implements CanActivate, CanActivateChild {
    token:String;
    canActivateChild = this.canActivate;
    constructor(private router: Router) {}
    canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
        if (!this.token) {
            this.router.navigate(['/signin']);
            return false;
        }
        return true;
    }
}

export const ROUTES: Routes = [{
    path: 'signup',
    component: SignupComponent
}, {
    path: 'securedpath',
    component: SecuredComponent,
    canActivateChild: [AuthService],
    canActivate: [AuthService]
}]

但是这个服务应该是单例的。记在心上。在你的 app.module 的提供者列表中声明它(或者 core.module 如果你使用 Jonh Papa 的风格指南)

于 2017-06-08T09:30:08.070 回答