将cognitoUser.authenticateUser回调转换为可观察的

时间:2018-11-24 21:28:04

标签: javascript angular rxjs amazon-cognito

我正在使用AWS Cognito Javascript SDK进行身份验证来构建角度应用程序。

我有一个使用index = len(word)/2方法的服务:

index = len(word)//2

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

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

这怎么实现?

1 个答案:

答案 0 :(得分:4)

您可以返回新的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();
      }
    });
  });
}