【发布时间】:2021-11-17 14:22:33
【问题描述】:
我正在尝试创建一个自定义令牌以使用用户名登录用户。我浏览了一些文档https://firebase.google.com/docs/auth/admin/create-custom-tokens#web,这些文档通过How to provide user login with a username and NOT an email? 链接到我,我看到我需要添加
使用 Firebase Admin SDK 创建自定义令牌
和
使用客户端上的自定义令牌登录
目前,我可以根据文档了解需要包含哪些内容,但我不确定这将在源代码中的什么位置。我在哪里添加文档中的代码?这是 userUser.js 文件的源代码,以防万一。
import { useEffect, useState } from "react";
import { useRouter } from "next/router";
import firebase from "firebase/app";
import "firebase/auth";
import initFirebase from "../../config";
import {
removeUserCookie,
setUserCookie,
getUserFromCookie,
} from "./userCookie";
initFirebase();
export const mapUserData = async (user) => {
const { uid, email } = user;
const token = await user.getIdToken(true);
return {
id: uid,
email,
token,
};
};
const useUser = () => {
const [user, setUser] = useState();
const router = useRouter();
// this is most likely where the custom token for
// username goes
const logout = async () => {
return firebase
.auth()
.signOut()
.then(() => {
router.push("/");
})
.catch((e) => {
console.error(e);
});
};
useEffect(() => {
const cancelAuthListener = firebase
.auth()
.onIdTokenChanged(async (userToken) => {
if (userToken) {
const userData = await mapUserData(userToken);
setUserCookie(userData);
setUser(userData);
} else {
removeUserCookie();
setUser();
}
});
const userFromCookie = getUserFromCookie();
if (!userFromCookie) {
return;
}
setUser(userFromCookie);
return () => cancelAuthListener;
}, []);
return { user, logout };
};
export { useUser };
任何帮助将不胜感激。
【问题讨论】:
标签: javascript reactjs firebase firebase-authentication