如何只允许我的数组中的电子邮件能够注册一个帐户

How to only allow emails in my array to be able to sign up for an account

我正在为必须进行用户身份验证的工作创建一个应用程序。但是,我只希望某些电子邮件能够注册和访问该应用程序。我有一个数组设置为特定的电子邮件,我试图遍历该数组,如果 req.body 不匹配数组中的任何电子邮件,那么 return 一个错误。

对于这个问题,我提供了带有占位符电子邮件的 emailArray。在实际的应用程序中,我将电子邮件放在 .env 文件中,然后将环境变量放入数组中。

我正在尝试使用 for 循环遍历数组,但这不起作用。当我尝试使用数组中的电子邮件在邮递员中点击这条路线时,我仍然收到错误“无效电子邮件”

我不确定我做错了什么。也许 for 循环不是解决这个问题的方法。任何关于如何实现这一目标的建议将不胜感激!

我正在为此应用程序使用 sequelize。我将在图片下方提供模型、路由和服务器文件,以帮助任何人解决问题。

createUser: async (req, res) => {

        const { email, password } = req.body;

        const emailArray = ["email1@email.com", "email2@email.com", "email3@email.com", "email4@email.com"]
        try {

            for (let i = 0; i < emailArray.length; i++) {

                if (email !== emailArray[i]) {

                    return res.status(401).json("Invalid Email");
                };

            }

            const newUser = await Users.create({ email, password });

            res.json(newUser);


        } catch (error) {

            console.error(error.message);
            return res.status(500).json(error);

        };
    }

型号

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class Users extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  };
  Users.init({
    email: DataTypes.STRING,
    password: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'Users',
    tableName: 'users',
    timestamps: false
  });
  return Users;
};

路线

const router = require('express').Router();

const usersController = require("../controllers/users");

router.post('/register', usersController.createUser);

module.exports = router
const express = require('express');
const exphbs = require('express-handlebars');
const path = require('path');
require('dotenv').config()

const { sequelize } = require('./models');

const port = process.env.PORT || 3000;

const app = express();

//Handlebars Middleware
app.engine(
  "handlebars",
  exphbs({
    defaultLayout: "main",
    runtimeOptions: {
      allowProtoPropertiesByDefault: true,
      allowProtoMethodsByDefault: true,
    },
  })
);

app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, 'views'))

app.use(express.static(path.join(__dirname, 'public')));

//Express Middleware
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

//Express Route
app.use('/', require('./routes/users'));

app.listen(port, async () => {
  console.log(`Server started on port ${port}`);
  await sequelize.sync();
  console.log('Database connection established');
});



它不起作用,因为在 for 循环中,第一次迭代检查电子邮件的有效性 - 它 returns 错误并中断

createUser: async (req, res) => {

        const { email, password } = req.body;

        const emailArray = ["email1@email.com", "email2@email.com", "email3@email.com", "email4@email.com"]
        try {
            const isValid = emailArray.includes(req.body.email)
            if (!isValid) {
                return res.status(401).json("Invalid Email");
            }

            const newUser = await Users.create({ email, password });

            res.json(newUser);


        } catch (error) {

            console.error(error.message);
            return res.status(500).json(error);

        };
    }