незарегистрированные пользователи могут войти в мое приложение Firebase - PullRequest
1 голос
/ 08 марта 2020

Я реализовал метод входа с паролем и вводом электронной почты. Но даже незарегистрированные электронные письма могут войти. Существует предупреждающее сообщение о том, что электронная почта не соответствует какой-либо записи в базе данных, однако я попадаю на домашнюю страницу:

Служба аутентификации:

login(email, password) {
    return this.afAuth.auth.signInWithEmailAndPassword(email, password)
      .then((result) => {
        this.router.navigate(['/home']);
      }).catch((error) => {
        window.alert(error.message)
      })
  }

Компонент входа в систему TS:

 ngOnInit() {
    this.loginForm = this.fb.group({
      email: ['', Validators.required],
      password: ['', Validators.required]
    });

  }
  get email() { return this.loginForm.get('email') }
  get password() { return this.loginForm.get('password') }



  onSubmit() {
    if (this.loginForm.invalid)
      return;

    this.authService.login(this.email.value, this.password.value)
      .then(data => {
        let returnUrl = this.route.snapshot.queryParamMap.get('returnUrl');
        this.router.navigate([returnUrl || '/home']);
        console.log(data)

      }).catch(error => {
        console.log(error)
      })
  }

И HTML

 <form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
        <div class="form-row">
          <div class="col-md-6">
            <label for="email">Email</label>
            <input type="text" formControlName="email" class="form-control">
            <div *ngIf="email.touched && email.invalid" class="alert alert-danger">
              <div *ngIf="email.errors.required">email is required</div>
            </div>
          </div>
          <div class="col-md-6">
            <label for="password">Password</label>
            <input type="password" formControlName="password" class="form-control">
            <div *ngIf="password.touched && password.invalid" class="alert alert-danger">
              <div *ngIf="password.errors.required">Password is required</div>
            </div>
            <div *ngIf="errorMessage" class="alert alert-danger">
              Username or password is incorrect
            </div>
          </div>
          <div class="col-md-12 text-center">
            <button class="btn btn-primary btn-block text-center" type="submit" style="font-weight:bold">Log in</button>
          </div>
        </div>
      </form>

Чего-то не хватает? Почему пользователь не заблокирован?

1 Ответ

3 голосов
/ 08 марта 2020

Вы ловите ошибку внутри authService.login, поэтому она больше не является ошибкой с точки зрения внешней функции, и .then в onSubmit будет работать даже при неудачной попытке входа в систему.

Просто удалите .catch в authService.login (если предупреждение только для тестирования) или добавить throw error после window.alert следующим образом:

login(email, password) {
    return this.afAuth.auth.signInWithEmailAndPassword(email, password)
      .then((result) => {
        this.router.navigate(['/home']);
      }).catch((error) => {
        window.alert(error.message)
        throw error // <<< Rethrow! Otherwise, the error won't make it to the outside!
      })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...