【问题标题】:Adding Session Timeout for Angular 2 Authentication front-end为 Angular 2 身份验证前端添加会话超时
【发布时间】:2017-06-20 14:05:40
【问题描述】:

我已按照以下教程 [1] 为我的应用程序设置身份验证。现在我需要通过为 Angular 2 前端添加会话超时来修改身份验证。那是在会话到期后的 20 分钟内,并要求用户再次登录。

如何为我的身份验证系统开发此扩展功能。

[1]http://jasonwatmore.com/post/2016/09/29/angular-2-user-registration-and-login-example-tutorial

【问题讨论】:

    标签: angular


    【解决方案1】:
    import { Injectable }           from '@angular/core';
    import { Observable }           from 'rxjs/Observable';
    import { BehaviorSubject }      from 'rxjs/BehaviorSubject';
    import                               'rxjs/add/operator/map';
    import                               'rxjs/add/operator/filter';
    import                               'rxjs/add/Observable/timer';
    import                               'rxjs/add/operator/do';
    import                               'rxjs/add/operator/switch';
    @Injectable()
    export class AuthService {
      private authState:    AuthState;
      private authManager:  BehaviorSubject<AuthState>;
      public  authChange$:  Observable<AuthState>;
      constructor() {
        this.authManager = new BehaviorSubject(AuthState.LOGGED_OUT);
        this.authChange$ = this.authManager.asObservable();
        this.authChange$
          .filter((authState:AuthState) => authState === AuthState.LOGGED_IN)
          .map(   (authState:AuthState) => Observable.timer(SESSION_TIMEOUT))
          .do(    () => 
            console.log('Logged In. Session Timout counting down from now'))
          .switch()
          .subscribe( () => {console.log('Timer ended: Logging out')
                             this.logout();
                            });
      }
    
      login() {
        this.setAuthState(AuthState.LOGGED_IN);
      }
      logout() {
        this.setAuthState(AuthState.LOGGED_OUT);
      }
      emitAuthState():void {
        this.authManager.next(this.authState);
      }
    
      private setAuthState(newAuthState:AuthState):void {
        console.log('AuthService: setAuthState: ', 
            AuthState[newAuthState.toString()]);
        if (newAuthState != this.authState) {
          this.authState = newAuthState;
          this.emitAuthState();
        }
      }
    
    export enum AuthState {
      LOGGED_IN,
      LOGGED_OUT
    }
    
    const SESSION_TIMEOUT = 5000;
    

    【讨论】:

    • 你能解释一下你的答案吗?你在这里提到什么......??
    猜你喜欢
    • 2019-07-26
    • 2011-10-18
    • 1970-01-01
    • 2010-12-02
    • 1970-01-01
    • 2010-12-01
    • 2010-10-02
    • 2018-11-16
    • 2013-10-22
    相关资源
    最近更新 更多