我一直为此苦苦挣扎。我在下面的上下文提供程序不会触发任何onAuthStateChanged更改-即,即使用户已登录,它也不会填充用户。
AuthProvider.js
import React, { createContext, useState, useEffect } from 'react';
import { firebaseAuth } from '../firebase/firebase';
export const AuthContext = createContext({ loggedIn: false });
const AuthProvider = props => {
const [user, setUser] = useState({ loggedIn: false, email: null });
useEffect(() => {
const unsubscribe = firebaseAuth.onAuthStateChanged(user => {
console.log(user); // Fires once "null"
console.log(firebaseAuth.currentUser); // Fires once "null"
if (user) {
console.log('logged in');
setUser({ loggedIn: true, email: user.email });
} else {
console.log('not logged in'); // Fires once
setUser({ loggedIn: false });
}
});
return () => {
unsubscribe();
}
}, []);
return (
<AuthContext.Provider value={user}>
{props.children}
</AuthContext.Provider>
);
};
export default AuthProvider;
firebase/firebase.js
import firebase from 'firebase/app';
import 'firebase/analytics';
import 'firebase/auth';
import 'firebase/firebase-firestore';
const firebaseConfig = {
apiKey: process.env.REACT_APP_FIREBASE_API_KEY,
authDomain: process.env.REACT_APP_FIREBASE_AUTH_DOMAIN,
databaseURL: process.env.REACT_APP_FIREBASE_DATABASE_URL,
projectId: process.env.REACT_APP_FIREBASE_PROJECT_ID,
storageBucket: process.env.REACT_APP_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.REACT_APP_MESSAGING_SENDER_ID,
appId: process.env.REACT_APP_FIREBASE_APP_ID,
measurementId: process.env.REACT_APP_FIREABSE_MEASUREMENT_ID
};
const firebaseApp = firebase.initializeApp(firebaseConfig);
firebase.analytics();
export const firebaseAuth = firebase.auth();
export default firebaseApp;
App.js
import React from 'react';
import AuthProvider from './providers/AuthProvider';
import Routes from './components/Routes';
import './App.scss';
const App = () => {
return (
<AuthProvider>
<Routes />
</AuthProvider>
);
}
export default App;
如上所述,我从AuthProvider.js获得一次控制台输出-null,null和“未登录”。
有人可以向我指出正确的方向,为什么它在登录时没有填充我的用户? 谢谢!
答案 0 :(得分:0)
问题似乎出在我的UI Config中。我有signInSuccessUrl: '/'
。一旦我删除了它,它就起作用了。