登录系统node.js和firebase

问题描述 投票:0回答:1

我正在尝试制作注册码,并使用 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}`);
});

我尝试了几种方法来尝试解决这个问题,不幸的是没有任何结论,我仍然停留在这个水平

node.js firebase firebase-authentication firebase-admin
1个回答
0
投票

我发现您正在尝试使用 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 配置详细信息。

如果仍然遇到问题,请提供您遇到的具体错误消息,以便我进一步帮助您调试。

© www.soinside.com 2019 - 2024. All rights reserved.