【发布时间】:2021-10-31 06:43:39
【问题描述】:
我在使用 Firebase Github Auth 进行身份验证时尝试获取用户的用户名。但我无法得到它。我得到除了用户名之外的所有用户信息 这是我的代码:
import React, { useState, useContext, createContext, useEffect } from "react"
import { auth, createUserProfileDocument } from "../config/fbConfig"
const AuthContext = createContext()
export const useAuth = () => {
return useContext(AuthContext)
}
export const AuthProvider = ({ children }) => {
const [currentUser, setCurrentUser] = useState(null)
const provider = new auth.GithubAuthProvider()
provider.addScope("read:user")
const githubSignIn = () => {
return auth().signInWithRedirect(provider)
}
const githubSignOut = () => {
return auth().signOut()
}
useEffect(() => {
const unsubscribe = auth().onAuthStateChanged(async (userAuth) => {
// setCurrentUser(user);
if (userAuth) {
const useRef = await createUserProfileDocument(userAuth)
useRef.onSnapshot((snapShot) => {
console.log(snapShot)
setCurrentUser({
id: snapShot.id,
...snapShot.data(),
})
})
} else {
setCurrentUser(userAuth)
}
})
return unsubscribe
}, [])
const value = {
currentUser,
githubSignIn,
githubSignOut,
}
return <AuthContext.Provider value={value}> {children} </AuthContext.Provider>
}
fbConfig.js 文件代码
export const createUserProfileDocument = async (userAuth) => {
if (!userAuth) return
const userRef = firestore.doc(`users/${userAuth.uid}`)
const snapShot = await userRef.get()
if (!snapShot.exists) {
const { email, photoURL, providerData } = userAuth
const createdAt = new Date()
getGitHubUserData(providerData[0].uid)
.then(async (gitHubUserData) => {
const username = gitHubUserData.login
try {
await userRef.set({
email,
photoURL,
createdAt,
displayName: providerData[0].displayName,
username,
})
} catch (error) {
console.log(error.message)
}
})
.catch((err) => console.error("Don't forget error handling: ", err))
}
return userRef
}
请大家帮帮我。
【问题讨论】:
标签: reactjs firebase firebase-authentication