当我有了客户端-服务器模型时,我试图弄清楚 Firebase 是如何工作的。通常客户端向服务器执行登录/注册请求。 Firebase 文档 https://firebase.google.com/docs/auth/web/start?hl=en&authuser=0 显示了如何注册/登录,但代码是否适用于客户端?其他来源建议这样做,但我可以在服务器端运行“createUserWithEmailAndPassword”和“signInWithEmailAndPassword”吗?
我的服务器(用express和node编写)现在看起来像这样:
import { initializeApp as adminInitializeApp, applicationDefault} from 'firebase-admin/app';
import { initializeApp } from "firebase/app";
import { getAnalytics } from "firebase/analytics";
const firebaseConfig = {
};
// Initialize Firebase
const fireApp = initializeApp(firebaseConfig);
const fireAppAdmin = adminInitializeApp({
credential: applicationDefault(),
});
// const analytics = getAnalytics(fireApp);
import { getAuth, createUserWithEmailAndPassword } from "firebase/auth";
const auth = getAuth();
.....
app.post("/auth/register", async (req, res) => {
createUserWithEmailAndPassword(auth, req.body.email, req.body.password)
.then((userCredential) => {
// Signed up
const token = userCredential.user.getIdToken();
res.status(200).send({
token,
});
我需要管理员来验证从客户端发回的令牌。这是正确的做法吗?
我可以在服务器端运行“createUserWithEmailAndPassword”和“signInWithEmailAndPassword”吗?
是的,可以。但它们并不打算以这种方式使用。这些应该从客户端使用,而不是从服务器使用。
这仅取决于您的用例。例如,您可以:
A) 使用客户端的
createUserWithEmailAndPassword
。在服务器端设置一个 auth 触发器,以便您可以侦听用户创建事件并对其做出反应(例如发送欢迎电子邮件)。
B) 如果您不想允许用户从客户端创建自己的帐户,您可以创建一个端点(例如,使用“可调用函数”),以便您的客户端向服务器发送请求。然后,服务器验证并执行您需要的任何操作,最终创建身份验证用户帐户(从服务器,使用 Firebase Admin SDK 在 Firebase 身份验证服务中创建用户)。 在这两种情况下,您最终都会在 Firebase Auth 服务中获得一个新用户。