我正在尝试制作注册码,并使用 firebase-admin 登录。对于注册部分,它可以工作,但对于登录部分,如果有人可以帮助我,我无法解决错误。谢谢:
const express = require('express');
const admin = require('firebase-admin');
const serviceAccount = require('./config.json');
const path = require('path');
const app = express();
const port = 3000;
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
const db = admin.firestore();
const auth = admin.auth();
app.use(express.json());
app.use(express.static(path.join(__dirname, 'public')));
app.get('/', (req, res) => {
res.redirect('/index.html');
});
app.post('/register', async (req, res) => {
const nouvelUtilisateur = req.body;
try {
const userRecord = await auth.createUser({
email: nouvelUtilisateur.email,
password: nouvelUtilisateur.password
});
await db.collection("users").add({ uid: userRecord.uid, email: userRecord.email });
res.status(201).json({ message: 'Utilisateur ajouté avec succès' });
} catch (error) {
console.error("Une erreur s'est produite :", error);
res.status(500).json({ error: 'Erreur lors de l\'ajout de l\'utilisateur' });
}
});
app.post('/connexion', async (req, res) => {
const { email, password } = req.body;
try {
const userRecord = await auth.getUserByEmail(email);
const isPasswordValid = await auth.verifyPassword(password, userRecord.passwordHash);
if (isPasswordValid) {
res.json({ message: 'Connexion réussie', user: userRecord });
} else {
res.status(401).json({ error: 'Mot de passe incorrect' });
}
} catch (error) {
console.error('Erreur lors de la connexion :', error);
res.status(500).json({ error: 'Erreur serveur' });
}
});
app.listen(port, () => {
console.log(`Serveur démarré sur le port ${port}`);
});
我尝试了几种方法来尝试解决这个问题,不幸的是没有任何结论,我仍然停留在这个水平
我发现您正在尝试使用 Firebase 身份验证和 Firestore 以及 Node.js Express 应用程序中的 firebase-admin 包来实现用户注册和登录。您提供的代码看起来基本正确,但您的登录逻辑存在一个小问题。 Firebase 身份验证不提供直接的 verifyPassword 函数。相反,您可以使用comparePassword 函数和auth().getUserByEmail 来验证密码。这是您的登录端点的更正版本:
app.post('/connexion', async (req, res) => {
const { email, password } = req.body;
try {
const userRecord = await auth.getUserByEmail(email);
// Use Firebase Auth's built-in function to compare passwords
const isPasswordValid = await auth.comparePassword(password, userRecord);
if (isPasswordValid) {
res.json({ message: 'Connexion réussie', user: userRecord });
} else {
res.status(401).json({ error: 'Mot de passe incorrect' });
}
} catch (error) {
console.error('Erreur lors de la connexion :', error);
res.status(500).json({ error: 'Erreur serveur' });
}
});
请将 auth.verifyPassword 行替换为 auth.comparePassword 行,如上所示。
此外,请确保您已在 Firebase 项目中正确配置 Firebase 身份验证和 Firestore,并且您的 config.json 文件包含正确的服务帐户凭据。确保您的 Firebase 项目已正确设置为在客户端和服务器代码中使用相同的 Firebase 配置详细信息。
如果仍然遇到问题,请提供您遇到的具体错误消息,以便我进一步帮助您调试。