Aws Cognito + Angular 7 - Как создать пользователя и назначить пользователя в группу пользователей одновременно - PullRequest
0 голосов
/ 13 февраля 2019

Я хочу создать пользователя Cognito и назначить пользователя группе пользователей одновременно .когда вам нужно создать наблюдаемое, это хорошо для меня.Но когда нужно создать наблюдаемую, которая делает два запроса, я не работаю.Я думаю, что мы должны использовать forkJoin или flatMap.Я использую Angular 7, поэтому RxJs 6.x.

Создать код ОК:

createUser(user: User): Observable<User[]> {
    const _self = this;
    const cognitoidentityserviceprovider = new AWSCognito.CognitoIdentityServiceProvider({
      credentials: this.getCognitoCreds()
    });
    const params = {
      UserPoolId: this.poolData.UserPoolId,
      Username: user.username,
      DesiredDeliveryMediums: [ 'EMAIL' ],
      ForceAliasCreation: false,
      MessageAction: 'SUPPRESS',
      TemporaryPassword: '1234fooo*',
      UserAttributes: [
        {
          Name: 'email',
          Value: user.email
        }
      ]
    };
    return Observable.create(obs => {
      cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) {
        if (error) {
          console.log(error);
          return Observable.throw(error || 'Server error');
        } else {
          console.log(data);
          //
          //
          // HERE user is create  :)
          // I want add to group here (see code down in this post) 
          //
          //
          return obs.next(data);
        }
      });
    });
  }

Добавить код группы ОК:

const p = {
            GroupName: 'admin',
            UserPoolId: _self.poolData.UserPoolId,
            Username: user.username
          };
          return Observable.create(o => {
            cognitoidentityserviceprovider.adminAddUserToGroup(p, function(err, d) {
              if (err) {
                console.log(err);
                return Observable.throw(err || 'Server error');
              } else {
                console.log(d);
                return o.next(d);
              }
            });
          });

1 Ответ

0 голосов
/ 13 февраля 2019

Я помещаю первую наблюдаемую в const, а после возвращаю эту наблюдаемую .pipe (mergeMap ((u: CognitoUser) => {2nd observable}

createUser(user: User): Observable<User[]> {
    const _self = this;
    const cognitoidentityserviceprovider = new AWSCognito.CognitoIdentityServiceProvider({
      credentials: this.getCognitoCreds()
    });
    const params = {
      UserPoolId: this.poolData.UserPoolId,
      Username: user.username,
      DesiredDeliveryMediums: [ 'EMAIL' ],
      ForceAliasCreation: false,
      MessageAction: 'SUPPRESS',
      TemporaryPassword: '1234Fooo*',
      UserAttributes: [
        {
          Name: 'email',
          Value: user.email
        }
      ]
    };
    const o = Observable.create(obs => {
      cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) {
        if (error) {
          console.log(error);
          return Observable.throw(error || 'Server error');
        } else {
          console.log(data);
          return obs.next(data.User);
        }
      });
    });
    return o.pipe(mergeMap((u: CognitoUser) => {
      const p = {
        GroupName: 'admin',
        UserPoolId: _self.poolData.UserPoolId,
        Username: u.Username
      };
      return Observable.create(ob => {
        cognitoidentityserviceprovider.adminAddUserToGroup(p, function(err, d) {
          if (err) {
            console.log(err);
            return Observable.throw(err || 'Server error');
          } else {
            console.log(d);
            return ob.next(d);
          }
        });
      });
    }));
  }
...