Я пытаюсь реализовать вход в систему в @ angular / core 7.1.0 и @ ngrx / store 7.0.Теперь проблема в том, что когда я отправляю новое действие Login из моего компонента входа в систему, он корректно прослушивает эффект Login, но даже при отправке нового действия LoginSuccess, действие входа застряло в бесконечном цикле, пока не произошло действие LoginFailure. (Когда я останавливаю серверную частьсервис).
auth.effects.ts
@Effect()
login$: Observable<Action> = this.actions$.pipe(
ofType(AuthActionTypes.LOGIN),
map((action: Login) => action.payload),
switchMap(payload => {
console.log('SwitchMap: Login [Effect]: payload', payload);
return this.authService.login(payload.email, payload.password).pipe(
map((loginResponse: LoginResponse) => {
console.log('loginResponse:', loginResponse);
return new LoginSuccess(loginResponse);
}),
catchError(error => {
console.log(error);
return of(new LoginFailure({ error: error }));
})
);
})
);
@Effect({ dispatch: false })
loginSuccess: Observable<any> = this.actions$.pipe(
ofType(AuthActionTypes.LOGIN_SUCCESS),
map((action: LoginSuccess) => action.payload),
tap((loginResponse: LoginResponse) => {
console.log('Login_Success [Effect]: payload', loginResponse);
localStorage.setItem('accessToken', loginResponse.accessToken);
localStorage.setItem('refreshToken', loginResponse.refreshToken);
localStorage.setItem('user', JSON.stringify(loginResponse.user));
// if (loginResponse.user.isSuperAdmin) {
// this.router.navigate(['/admin/dashboard']);
// } else {
// this.router.navigate(['/dashboard']);
// }
})
);
login.component.ts
onSubmit() {
// Will triggered only when form is submitted
if (this.loginForm.valid) {
console.log('Form Submitted: values', this.loginPayload);
this.store.dispatch(new Login({ email: this.loginPayload.username, password: this.loginPayload.password }));
this.loginForm.resetForm();
}
}
Редактировать: Новый поиск Когда я возвращаю вызов http (из authService), наблюдаемый как:
return this.http.put<LoginResponse>('/api/v1/entrance/login', body);
эта ошибкапроисходит (т.е. запрос застревает в бесконечном цикле).Но когда я подделываю API, переназначая новые наблюдаемые, как показано ниже, это не так.
return new Observable<LoginResponse>((observer) => {
if (email === 'superadmin@xyz.com' && password === 'abc123') {
const data: LoginResponse = {
accessToken: 'dadsfjhsjdahlfjh#324jk34h23343kkjlsadsads',
refreshToken: 'jfjsdg-32432-sdf4543-sdff4234-3424-3434',
user: {
email: 'superadmin@xyz.com',
name: 'Superadmin',
isSuperAdmin: true,
id: 1,
isLdapUser: false,
isAdUser: false,
lastSeenAt: new Date().getTime()
}
};
observer.next(data);
} else {
observer.error({ error: 'invalid credentials.' });
}
observer.complete();
});