2016-09-08 1 views
6

사용자가 내 사이트에 방문하면 사용자가 이전 세션에서 이미 로그인했는지 여부를 확인하려면 onAuthStateChanged을 사용합니다.onAuthStateChanged inconsistent

주요 문제는 소수의 사용자에 대해 일관성이 없었기 때문에 코드에서 유효한 로그인 세션이 감지되지 않는 것으로 보입니다.

다음 코드는 앱 자체에 있으며 사용자는 홈페이지 또는 로그인 페이지에서 리디렉션 한 후 해당 페이지에 있습니다.

사용자가 앱으로 직접 리디렉션되어야하는지 여부를 결정하기 위해 사이트의 홈페이지도 onAuthStateChanged을 사용합니다. 로그인 페이지는 signInWithEmailAndPassword를 사용하며 로그인이 성공하면 앱 페이지 (다음 코드 있음)로 리디렉션합니다.

firebase.auth().onAuthStateChanged(function (authUser) { 
    if (authUser) return initApp(authUser); 

    // issue: sometimes users that *should* be signed-in get signed in anonymously here 
    firebase.auth().signInAnonymously().then(function (authUser) { 
    initApp(authUser); 
    } 
}); 

는 뭔가 내 유스 케이스에 사용되어야하지 onAuthStateChanged인가? 이 아이디어를 개선/수정하는 방법은 무엇입니까?

편집 : 휴대 전화 사용자에게 더 많은 일이 발생합니다.

+1

로그인 페이지에서 리디렉션하기 전에 signInWithEmailAndPassword가 해결 될 때까지 기다려야합니다. 앱 페이지로 너무 일찍 리디렉션 될 수 있습니다. 위의 코드에서 onAuthStateChanged 옵저버가 익명으로 로그인 한 후 다시 트리거되므로 익명으로 로그인하면 initApp가 두 번 호출됩니다. – bojeil

+0

감사합니다. 오른쪽 - 코드가 다시 실행되지만 이미 로그인 한 사용자를 제대로 처리 할 수있는'initApp' 함수에'userInitiated' 변수가 있습니다. Wi-Fi 연결 손실로 인해 사용자가 다시 연결되었거나 임의의 Firebase가 다시 연결 되어도 사용자가 오프라인 상태가 되더라도 이전 온라인 상태를 복원하기 위해 initApp 함수가 필요할 때가 있습니다. –

+0

그리고 예, 나는 signInWithEmailAndPassword가 리디렉션 전에 해결되었는지 확인했습니다. –

답변

관련 문제