2

인증을 위해 firebase를 사용하는 각도 2 응용 프로그램이 있습니다. authenticatonprovider로 Google을 사용하고 모든 것이 제대로 작동하도록 설정하고 싶습니다.나열된 도메인을 Firebase에서 리디렉션했지만 여전히 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는 기본 허용 도메인 중 하나입니다). 그리고이 오류로 인해 여전히 작동하는 popupwithupopup을 방지 할 수 있습니다.

누구나 팝업 방법이 작동하고 리디렉션이 작동하지 않는 이유를 알고 있습니까?

+0

. signInWithRedirect를 호출 할 때이 문제가 발생합니까? 네트워크 콘솔을 확인할 수 있습니까? 거기에 오류가 있습니까? 특히 getProjectConfig 엔드 포인트에 대한 요청을 확인하십시오. – bojeil

+0

나는 이전 프로젝트 설정을 확인하고는 올바른 데이터를 반환 할 것 같다 { "projectId": "299312368195", "authorizedDomains을"[ "localhost"를, "<*** 중포 기지 프로젝트 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); 
});