2016-12-25 11 views
2

私のionic2アプリはfirebase認証を使用しています。私は、このような複数のプロバイダ(GoogleとFacebook)に同じメールログインを使用すると、認証/アカウントに存在する別の認証情報のエラーを処理しようとします。ionic2アプリで例外を正しく処理する

constructor(public af: AngularFire,public navCtrl: NavController) { 
    firebase.auth().getRedirectResult() 
     .then(res=>{ 
     console.log('success',res) 
     }) 
    .catch((err:any)=>{ 
    console.log(error.message) 
    if (err.code=='auth/account-exists-with-different-credential'){ 
     doaccountlink(); 
    } 
    }) 
    } 



    fblogin(){ 
     firebase.auth().signInWithRedirect(new firebase.auth.FacebookAuthProvider()) 
     } 

     gglogin(){ 
     firebase.auth().signInWithRedirect(new firebase.auth.GoogleAuthProvider()) 
     } 

(期待通りに)私はcatchブロックでそのエラーコードをキャッチすることができますが、問題は例外で、まだコンソールに表示し、私のページも(画像を添付参照)にエラーが表示されます。私はjavascript/typescriptに新しいです、もし私がすでにキャッチブロックでエラーをキャッチするなら、それはうまくいくはずです。私のコードで何か間違っています。私のページにこの例外が表示されないようにするにはどうすればいいですか?

enter image description here

答えて

2

私たちはそこにどこかにスローされる別の例外では、あなたがそのページを参照してください理由ですしなければならない、慎重に起こっている正確に理解するためにあなたのコードをデバッグする必要があります。しかし、便利になることがあり、いくつかのヒントがあります:

  1. 例外で示されていることページを、理由IonicErrorHandlerです。あなたのapp.module.tsファイルを見てとることができ、およびプロバイダの配列で、あなたはこのラインを見つけることができます:

    providers: [ 
        // services... 
        { provide: ErrorHandler, useClass: IonicErrorHandler } 
    ] 
    

    だから基本的にイオンは、そのクラスでAngular 2 default's ErrorHandlerを拡張しています。また、が実行されているのはdevのサーバーで実行されているだけで、何も行われていません(ソースコードhereをご覧ください)。

  2. あなたのアプリのコンテキストで意味があるのか​​どうかはわかりませんが、独自のエラーハンドラを作成して、独自のコードで例外を処理してみてください。あなたがhereを見ることができると同じように、あなたはErrorHandler

    class MyErrorHandler implements ErrorHandler { 
        handleError(err: any): void { 
         // do something with the error 
        } 
    } 
    

    を実装してからapp.module.ts

    { provide: ErrorHandler, useClass: MyErrorHandler }

  3. { provide: ErrorHandler, useClass: IonicErrorHandler }

    を置き換える新しいクラスを作成することによってそれを行うことができます

ありがとう、sebaferreras 10
+0

カスタムエラーハンドラを使用すると、ページに表示されるエラーを避けることができます。コンソールに表示するだけです。しかし、私はエラーが処理し、キャッチボックスで完了する必要がありますと思います。 IonicErrorHandlerまたはmyCustomHandlerを参照しないでください。問題を再現するには、空のionic2プロジェクトを作成し、angularfire2モジュールを追加し、次にhome.tsに2つの関数(ggloginとfblogin)を書きます。ここで提供していないものは、app.module.tsのfirebase configです。 – user1084081

+0

@ user1084081これはバグかもしれませんか? https://github.com/angular/angularfire2/issues/566#issuecomment-250344817 – Clark