我正在将Firebase的google身份验证集成到我的React应用程序中,并且遇到了一个问题:用户成功登录,但当页面刷新时,他不再登录。
我有一个文件Firebase.js,其中包含我所有的firebase功能:
if (!firebase.apps.length) {
fb = firebase.initializeApp(config);
} else {
fb = firebase.apps[0];
}
module.exports = {
app: fb,
db: fb.database(),
auth: fb.auth,
isUserSignedIn: () => {
var user = fb.auth.currentUser;
if (user) {
return true;
} else {
return false;
}
},
signIn: () => {
var provider = new firebase.auth.GoogleAuthProvider();
fb.auth().signInWithPopup(provider).then(function(result) {
console.log("Signed in using Google.");
}).catch(function(error) {
console.log("Error occured with sign in.");
location.reload();
});
},
}我的应用程序成功加载了谷歌登录弹出窗口,并在控制台"Signed in using Google."中收到消息
但是,在我检查用户是否已登录的React组件中,当页面刷新时,它会显示用户尚未登录:
import fb from '../../../Firebase';
if (typeof window !== 'undefined') {
const container = document.getElementById('navBar');
let isSignedIn = fb.isUserSignedIn();
console.log("Signed in: " + isSignedIn);
ReactDOM.render(<UserLink props={{signedIn: isSignedIn }} />, container);
}我检查了firebase的身份验证控制台,知道用户已经通过了身份验证,但由于某些原因,我的应用程序没有注意到这一点。
有人能帮我看看我哪里做错了吗?
发布于 2018-03-07 10:33:57
使用auth state change callback来获取登录状态,而不是依赖于代码在页面加载时开始运行时是否立即可用。An example is in the documentation。
firebase.auth().onAuthStateChanged(function(user) {
if (user) {
// User is signed in.
} else {
// User is signed out.
// ...
}
});https://stackoverflow.com/questions/49143129
复制相似问题