【问题标题】:Convert cognitoUser.authenticateUser callback to observable将 cognitoUser.authenticateUser 回调转换为 observable
【发布时间】:2019-04-27 00:00:04
【问题描述】:

我正在构建一个使用 AWS Cognito Javascript SDK 进行身份验证的 Angular 应用程序。

我有一个服务,我有一个login 方法:

login(username: string, password: string): void {
  const authData = {
    Username: username,
    Password: password
  };
  const authDetails = new AuthenticationDetails(authData);
  const userData = {
    Username: username,
    Pool: userPool
  };
  this.cognitoUser = new CognitoUser(userData);
  const self = this;
  this.cognitoUser.authenticateUser(authDetails, {
    onSuccess: self.onSuccess.bind(self),
    onFailure: self.onFailure.bind(self),
    newPasswordRequired: function(userAttributes, requiredAttributes) {
      self.newPasswordRequired.next(true);
      self.authIsLoading.next(false);
    }
  });
}

现在,我不想直接在服务上使用回调,而是想从 login 方法返回一个 observable,我可以订阅它并获得身份验证结果:成功、失败或需要新​​密码。

我查看了 Observable bindCallbackbindNodeCallback 方法以及其他 question,但不知道该怎么做。

如何实现?

【问题讨论】:

    标签: javascript angular rxjs amazon-cognito


    【解决方案1】:

    你可以返回新的 Observable 并使用 next() 和 error() 触发观察者:

    login(username: string, password: string): Observable<{ type: string, result: any }>{
      const authData = {
        Username: username,
        Password: password
      };
      const authDetails = new AuthenticationDetails(authData);
      const userData = {
        Username: username,
        Pool: userPool
      };
      this.cognitoUser = new CognitoUser(userData);
      return new Observable<{ type: string, result: any}>(obs => {
        this.cognitoUser.authenticateUser(authDetails, {
          onSuccess: (result: any) => {
            obs.next({ type: 'success', result: result });
            obs.complete();
          },
          onFailure: (error: any) => obs.error(error),
          newPasswordRequired: (userAttributes, requiredAttributes) => {
            obs.next({ type: 'newPasswordRequired', result: [userAttributes, requiredAttributes] });
            obs.complete();
          }
        });
      });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2021-05-24
      • 1970-01-01
      • 2023-03-23
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多