React Context + Firebase身份验证未填充onAuthStateChanged

时间:2020-06-03 16:30:10

标签: reactjs firebase firebase-authentication react-hooks react-context

我一直为此苦苦挣扎。我在下面的上下文提供程序不会触发任何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和“未登录”。

有人可以向我指出正确的方向,为什么它在登录时没有填充我的用户? 谢谢!

1 个答案:

答案 0 :(得分:0)

问题似乎出在我的UI Config中。我有signInSuccessUrl: '/'。一旦我删除了它,它就起作用了。

相关问题