2

私はfirebaseを認証に使用する角度2のアプリケーションを使用しています。 私はauthenticatonproviderとしてGoogleを使い、それがうまく動作するようにすべての設定をしたいと思います。ドメインがリダイレクトされていますが、依然としてsignInWithRedirectでエラーが発生します

私はsigninWithPopupを使用して認証しようとする(ドキュメントで述べたように)した場合、それは動作します:

firebase.auth().signInWithPopup(provider).then(function(result) { 
    // This gives you a Google Access Token. You can use it to access the Google API. 
    var token = result.credential.accessToken; 
    // The signed-in user info. 
    var user = result.user; 
    // ... 
}).catch(function(error) { 
    // Handle Errors here. 
}); 

をしかし、私はリダイレクトfirebase.auth().signInWithRedirect(provider) と同じコードをしようとすると、私はエラーを取得する:

[firebase-auth] Info: The current domain is not authorized for OAuth operations. This will prevent signInWithPopup, signInWithRedirect, linkWithPopup and linkWithRedirect from working. Add your domain (localhost) to the OAuth redirect domains list in the Firebase console -> Auth section -> Sign in method tab.

しかし、そのセクションのfirebaseコンソールにはドメインがリストされています(localhostはデフォルトの許可されたドメインの1つでもあります)。 また、このエラーは、まだ動作しているsigninwithupopupを防止すると述べています。

誰かがポップアップメソッドが機能し、リダイレクトしない理由を知っていますか?

+0

。 signInWithRedirectを呼び出すときにスローされますか?ネットワークコンソールを確認できますか?そこに何かエラーがありますか?具体的には、getProjectConfigエンドポイントへの要求を確認してください。 – bojeil

+0

私は以前のプロジェクトの設定をチェックし、正しいデータを返すようだ: { "PROJECTID": "299312368195"、 "authorizedDomains":[ "localhost" を、 「<*** FirebaseプロジェクトID *** > " " } 私が見る唯一の奇妙な振る舞いは、サイトが何らかのループに陥っていることです。角サイトが読み込まれ、認証が要求され、認証が拒否され(ドメインは許可されていない操作で)、ブラウザは角サイトにリダイレクトされ、これが読み込まれ、認証が求められます。 –

+0

このループが起こるには、あなたのロジックに何かがあるはずです。これをデバッグするのに役立つコードを追加できますか? – bojeil

答えて

1

私は最終的に問題が何かを考え出しました。 問題はドメインベースではないため、アプリケーションのフローに問題があります。 loginwithpopupコードは、app.component.tsのコンストラクタで呼び出されていました(サイトが読み込まれるとすぐにユーザーをログインさせることを意図しています)。

私はこのコードをloginwithredirect関数に変更しましたが、コンストラクタ内で呼び出されるため、Google認証ページ(あなたを永遠のループに入れます)からサイトにリダイレクトされるたびに呼び出されるためです。 ドメイン・エラーがブラウザ・コンソールに浮かんだ理由はまだ分かりませんが、リダイレクトから戻ってきたかどうかを確認するためにフローを修正すると、問題は消えました。

完全性のために、私はリダイレクト方法でログインするために使用する現在のコード:奇妙である

firebase.auth().getRedirectResult().then(function (result) { 
    if (result.credential) { 
    // This gives you a Google Access Token. You can use it to access the Google API. 
    var token = result.credential.accessToken; 
    // The signed-in user info. 
    var user = result.user; 
    } 
    else { 
    var provider = new firebase.auth.GoogleAuthProvider(); 

    provider.addScope('https://www.googleapis.com/auth/gmail.readonly'); 
    provider.addScope('https://www.googleapis.com/auth/calendar'); 
    provider.addScope('https://www.googleapis.com/auth/drive'); 
    provider.addScope('https://www.googleapis.com/auth/drive.appdata'); 
    provider.addScope('https://www.googleapis.com/auth/drive.file'); 

    firebase.auth().signInWithRedirect(provider); 

    } 
}).catch(function (error) { 
    // Handle Errors here. 
    console.log(error); 
}); 
関連する問題