Преобразование обратного вызова cognitoUser.authenticateUser в наблюдаемый - PullRequest
0 голосов
/ 25 ноября 2018

Я создаю угловое приложение, используя AWS Cognito Javascript SDK для аутентификации.

У меня есть служба, для которой у меня есть метод 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 bindCallback и bindNodeCallback , а также на этот другой вопрос , но не можете понять, как это сделать.

Какможет ли это быть достигнуто?

1 Ответ

0 голосов
/ 25 ноября 2018

вы можете вернуть новый 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();
      }
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...