gpt4 book ai didi

rxjs - Angularfire2 和 Rxjs Observable 不触发 Catch 和 Complete 方法

转载 作者:行者123 更新时间:2023-12-02 01:21:46 27 4
gpt4 key购买 nike

我在我的网站上做了一个授权,它工作正常,但我想处理错误,为了测试我为此目的导致了一个从 firebase 返回的错误:“一个帐户已经存在,具有相同的电子邮件地址但不同的符号 -在凭据中。使用与此电子邮件地址关联的提供商登录。”。我正在尝试使用以下代码编写一个 RXjs observable 来做到这一点:

private subscribleAuth() {
this.af.auth
.subscribe(
auth => {
this._auth = auth && auth.auth ? auth.auth : null;
if (this._auth) {
this.loginState = 'logged';
} else {
this.loginState = 'login';
}

},
err => {
console.log('error'),
this.loginState = 'error';
},
() => { console.log('done.') }
);
}

我的控制台从不显示“错误”或“完成”,所以我放入错误代码中的任何内容都不起作用。

enter image description here

注意:我知道导致 firebase 返回的原因,我只是想知道如何处理它以及为什么我编写的代码没有按预期工作,当没有返回错误时,网站按预期工作并具有相同的可观察性。

我正在使用 angularfire2: ^2.0.0-beta.5 和 Angular 2.0.0 final

编辑 1:even the official github project tells you to get the user as an observable and subscrible to it on Override configuration / No config Example app section..

编辑 2:reported as an issue也许这真的是一个错误,我会更新这篇文章。目前的解决方法是使用 yashmurty 在 github 上编写的这段代码:

import { AngularFire, AuthProviders } from 'angularfire2';
import { AuthBackend } from 'angularfire2/auth/auth_backend';

export class SocialmenuComponent {
constructor(public af: AngularFire, private _authBackend: AuthBackend) {
// this.af.auth.subscribe(
this._authBackend.getRedirectResult().subscribe(
(auth) => {
if(auth) {
console.log(auth);
} else {
console.log('User Not Logged In');
}
},
(err) => {
if(err) {
console.log('Error in auth.subscribe : ');
console.log(err);
} else {
console.log('No Error detected in auth.subscribe');
}
},
() => { console.log('done.') }
);
}
}

最佳答案

调用 AngularFire2 auth observable 的 createUserlogin 方法时发生的任何错误都通过返回的 promise 报告,而不是通过可观察。

例如:

import { AngularFire } from 'angularfire2';

...
class MyComponent {

constructor(af: AngularFire) {

af.auth.createUser({
email: 'someone@someplace.com',
password: 'somepassword'
})
.then((authState) => { console.log('success'); })
.catch((error) => { console.log('failure'); });
}

如果使用涉及重定向的方法进行身份验证,您可以这样做 ( jeffbcross solution from github ):

import { FirebaseApp } from 'angularfire2';
import * as firebase from 'firebase';

...
class MyComponent {

constructor(@Inject(FirebaseApp) fbApp: firebase.App) {

fbApp.auth().getRedirectResult()
.then((userCredential) => { console.log('success'); })
.catch((error) => { console.log('failure'); });
}
}

关于rxjs - Angularfire2 和 Rxjs Observable 不触发 Catch 和 Complete 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39710035/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com