Перенаправление Angularfire2 после входа в систему

#angular #firebase #ionic2 #firebase-authentication #angularfire2

#угловатый #firebase #ionic2 #firebase-аутентификация #angularfire2 #angular

Вопрос:

я использую ionic 2 rc0 и angular 2, и я только что добавил angularfire2 для использования аутентификации firebse.

Я все настроил и протестировал (я просто вижу, что мой пользователь вошел в консоль firebase), но я хочу перенаправить на другую страницу после входа в систему.

Мой код для входа в систему:

 registerUserWithGoogle() {
   console.log('Google');
   this.af.auth.login();
}
  

Моя конфигурация firebase:

 export const myFirebaseAuthConfig = {
   provider: AuthProviders.Google,
   method: AuthMethods.Redirect
};
  

Итак, есть способ перенаправить после метода login()?

Ответ №1:

AngularFire2 имеет свойство с именем authState в AngularFireAuth , на которое вы можете подписаться, чтобы получать изменения состояния авторизации

Это рекомендуемый способ обработки авторизации пользователя, поскольку вы будете подписываться на изменения в состоянии авторизации, другие методы могут работать не так, как ожидалось, например, когда пользователь обновляет страницу, объект пользователя может не существовать.

 import { AngularFireAuth } from 'angularfire2/auth';

@Component({
  templateUrl: 'app.html'
})
export class AppComponent {

  constructor(public afAuth: AngularFireAuth) {}

  ngOnInit() {
    this.afAuth.authState.subscribe(user => {
      if (user) {
        // go to home page
      } else {
        // go to login page
      }
    });
  }

}
  

Примечание: Вам не нужно подписываться на каждую страницу. Подписывайтесь только в AppComponent или в корневом компоненте вашего приложения.

Комментарии:

1. спасибо, теперь это работает, мне нужен метод выхода из системы, потому что я все еще зарегистрирован, но он перенаправляет так много

2. просто вызовите this.auth.logout() , вы выйдете из системы, и будет вызвана else часть auth.subscribe

Ответ №2:

Я обнаружил, что в моей ситуации это работает лучше.

 loginGoogle(){
  this.af.auth.login({
    provider: AuthProviders.Google
  }).then((success) => {
    this.router.navigate(['/dashboard']);
  });
}
  

Комментарии:

1. По какой-то причине функция ‘then’ promise для меня не выполнялась, поэтому я применил описанный выше подход инициализации.

2. Тогда у меня тоже не работало. Когда вы вызываете login(), он перезагружает ваш компонент после аутентификации пользователя, и, таким образом, это обещание никогда не выполняется.

3. здравствуйте, Алекс Харпер, я внедряю ваш код, но все еще не работает. он перенаправляет с помощью компонентов входа и регистрации на одной странице.