在角度2的每次刷新时清除localStorage

时间:2017-06-08 08:37:36

标签: angular angular-routing angular-router-guards

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

我没有想法如何以角度来做。我使用普通的js使用非常hacky方式。

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';
  }
});

我正在考虑添加一个身份验证保护程序,但我确信应该采用更有棱角的方式来执行此操作。

1 个答案:

答案 0 :(得分:0)

我建议创建一些auth服务来将您的令牌存储为普通变量和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的提供者列表中声明它(如果使用Jonh Papa的样式指南,则在core.module中声明)