Проблема с реализацией аутентификации по электронной почте и паролю MongoDB Stitch с помощью эффектов NgRx в приложении Ionic 4 / Angular 8 - PullRequest
0 голосов
/ 04 октября 2019

В настоящее время я работаю над реализацией приложения в Ionic 4 / Angular 8 и хочу обработать состояние через NgRx Store и Effects. В настоящее время я работаю над частью «Аутентификация» в моей настройке NgRx и попал в ловушку.

Я пытаюсь реализовать свое приложение с помощью MongoDB Stitch (серверная часть как сервис), и я проходил через Документычтобы узнать больше о том, как работает часть Auth (email / pwd auth). Я обнаружил, что метод loginWithCredentials возвращает Promise.

Однако NgRx-эффекты требуют от нас построения цепочки Observable, поэтому я попытался преобразовать возвращаемое Promise в Observable, используя метод from () из rxjs, но я получаю сообщение об ошибке и не смогнайти способ обойти это. Может кто-нибудь помочь?

Код моего эффекта выглядит следующим образом:

@Effect()
authLogin = this.actions$.pipe(
    ofType( AuthActions.LOGIN_START ),
    exhaustMap( (authData: AuthActions.LoginStart) => {
      this.stitchAppClient = Stitch.defaultAppClient;
      const credential = new 
         UserPasswordCredential(authData.payload.email, 
         authData.payload.password);
    from(this.stitchAppClient.auth.loginWithCredential(credential));
    }).pipe(
      catchError(error => {
        // ...
        return of();
      }),
      map((resData: StitchUser) => {
        return new AuthActions.LoginSuccess({
          email: resData.profile.email,
          userId: resData.id
        });
      })
    )
  );

Действие LOGIN_START просто получает адрес электронной почты и пароль для запуска процесса входа в систему.

export class LoginStart implements Action {
  readonly type = LOGIN_START;

  constructor( public payload: { email: string, password: string } ) {}
}

export type AuthActions = LoginStart;

Строка this.stitchAppClient.auth.loginWithCredential (credential) возвращает строку Promise в соответствии с StitchDocs. Тип StitchUser - это объект JS с полями, такими как идентификатор пользователя (строка), профиль пользователя (другой объект JS с электронной почтой и другими вещами) и другие пары ключ: значение, сгенерированные Stitch.

Даже до компиляциикод, с которым я получаю сообщение об ошибке в своей среде IDE (VS Code), также появляется при попытке скомпилировать приложение:

error TS2345: Argument of type '(authData: LoginStart) => void' is not assignable to parameter of type '(value: LoginStart, index: number) => ObservableInput<any>'.
[ng]       Type 'void' is not assignable to type 'ObservableInput<any>'.

Есть идеи? Спасибо!

...