如何只允许我的数组中的电子邮件能够注册一个帐户
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);
};
}
我正在为必须进行用户身份验证的工作创建一个应用程序。但是,我只希望某些电子邮件能够注册和访问该应用程序。我有一个数组设置为特定的电子邮件,我试图遍历该数组,如果 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);
};
}