Я использую библиотеку firebaseui-angular для аутентификации в моем угловом приложении. Я пытаюсь перенаправить пользователя после успешного входа в систему,
Хорошо известный жестко закодированный способ заключается в следующем, который работает абсолютно нормально,
const firebaseUiAuthConfig: firebaseui.auth.Config = {
callbacks: {
signInSuccessWithAuthResult: function(authResult, redirectUrl) {
// User successfully signed in.
// Return type determines whether we continue the redirect automatically
// or whether we leave that to developer to handle.
console.log('Father Callback!');
return true;
}
},
signInSuccessUrl: '/',
signInFlow: 'popup',
signInOptions: [
firebase.auth.GoogleAuthProvider.PROVIDER_ID,,
{
requireDisplayName: false,
provider: firebase.auth.EmailAuthProvider.PROVIDER_ID
},
firebaseui.auth.AnonymousAuthProvider.PROVIDER_ID
],
tosUrl: '<your-tos-link>',
privacyPolicyUrl: '<your-privacyPolicyUrl-link>',
credentialHelper: firebaseui.auth.CredentialHelper.NONE
};
Но это жестко запрограммировано для перенаправления на /
послевместо этого, я хочу, чтобы пользователь приземлился на выбранную страницу после входа в систему, поэтому я пытаюсь вызвать signInSuccessWithAuthResult
в компоненте следующим образом:
//HTML
<firebase-ui
(signInSuccessWithAuthResult)="successCallback($event)"
(signInFailure)="errorCallback($event)">
</firebase-ui>
//TS
returnUrl: string;
constructor(
public auth: AuthService,
private router: Router,
private route: ActivatedRoute,
public afAuth: AngularFireAuth) {}
ngOnInit() {
this.route.queryParams.subscribe(
retUrl => {
this.returnUrl = retUrl.returnUrl || '/';
console.log("You are set to redirected to "+this.returnUrl);
}
);
this.afAuth.authState.subscribe(this.firebaseAuthChangeListener);
}
private firebaseAuthChangeListener(response) {
// if needed, do a redirect in here
if (response) {
console.log('Logged in :)');
} else {
console.log('Logged out :(');
}
}
successCallback(signInSuccessData: FirebaseUISignInSuccessWithAuthResult) {
console.log("Logged in! Redirecting to "+this.returnUrl);
this.router.navigateByUrl(this.returnUrl);
}
errorCallback(errorData: FirebaseUISignInFailure) {
console.log("Login failure!");
}
Как уже упоминалось здесь . Но метод (signInSuccessWithAuthResult)="successCallback($event)"
из компонента вызывается только при входе из Google, а не из электронной почты или анонима!
Что мне не хватает?
EDIT
Единственное различие между входом в Gmail и входом в систему Email & Anonymous заключается в том, что Gmail открывает всплывающее окно, в котором эти бедные Anonymous и Email не могут.