2017-06-08 6 views
0

認証後にlocalStorageにトークンを格納していますが、リフレッシュするたびにそのトークンを削除してルータにリダイレクトする必要があります。角度2でリフレッシュするたびにlocalStorageをクリアします

私は角度でそれを行う方法がありません。私はプレーンな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'; 
    } 
}); 

私は認証ガードを追加することを考えていましたが、これを行うためのより角度のある方法があるはずです。

+2

ページリロードで生き残りたくない値があればリフレッシュ ") - なぜ最初にローカルストレージに置くのですか?普通の普通のJavaScript _variable_は、あなたが余分なステップを実行することなくそれを達成するでしょう... – CBroe

答えて

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(またはJonh Papaのスタイルガイドを使用している場合はcore.module)のプロバイダリストに宣言してください。

関連する問題