集成Angular2,Redux和JWT

时间:2016-10-20 16:06:17

标签: angular redux jwt

我遇到了使用Angular2和Redux的应用程序的问题。我决定使用Redux Observable(自Angular2使用RxJS以来事物的自然顺序),但RxJS对我来说非常棘手。

我正在通过史诗处理所有异步/副作用。对我来说很明显,但现在我需要将JWT添加到我的应用程序中,我不知道应该在哪里放置代码来保存和读取令牌?

我这样做:

  1. 发送LOGIN_REQUEST。
  2. 在史诗中,我向后端API发出异步请求,并在回复中获取电子邮件和令牌。
  3. 取决于结果,我发送LOGIN_SUCCESS或LOGIN_ERROR。
  4. 我认为在2和3之间应该有一个额外的点,但我不确定。我应该添加用于将JWT令牌保存到史诗的逻辑吗?

    我将非常感谢所有关于此的建议,并将JWT与Redux集成在一起。

1 个答案:

答案 0 :(得分:1)

您应该设置会话并将令牌保存到史诗中的localStorage - 这是您应该处理所有副作用的地方。

  login = ( action$ ) => {
    return action$.ofType(SessionActions.LOGIN_USER)
      .flatMap(( {user} ) => {
        return this.sessionService.login(user)
          .do(payload => {
            this.sessionService.setSession(payload.json());
          }).map(result => ({
            type: SessionActions.LOGIN_SUCCESS,
            payload: result.json()
          })).catch(error => Observable.of({
            type: SessionActions.LOGIN_ERROR,
            payload: error.json()
          }));
      });
  }

SessionService:

  setSession( user ) {
    this.storage.setItem('auth-user', user);
  }

  isLoggedIn() : boolean {
    return !!this.storage.getItem('auth-user');
  }