我的注册 post 请求一直重复
My register post request keeps being duplicated
我使用了 bcrypt、cookie-parser、jsonwebtoken、validator... 库。
我正在使用 express、jwt 和 sequelize。
我现在的情况是在注册会员的时候,先加入到DB中
如果您再次创建一个帐户,它将被复制。
const bcrypt = require("bcrypt");
const { User } = require("../../models");
const jwt = require("jsonwebtoken");
const {
registerValidator,
loginValidator,
} = require("../../validation/authValidation");
require("dotenv").config();
exports.register = async (req, res) => {
const { errors, isValid } = registerValidator(req.body);
let { email, username, password } = req.body;
if (!isValid) {
return res.status(400).json(errors);
}
const emailExists = await User.findOne({ Where: { email: email } });
console.log(emailExists);
if (emailExists) {
return res.status(400).json({ message: "이미 사용중인 이메일입니다." });
}
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = {
username: username,
email: email,
password: hashedPassword,
};
User.create(newUser)
.then((save) => {
res.status(200).json({ status: "Success", new_user_id: save.id });
})
.catch((err) => res.status(500).json({ message: err + "잘안됩니다." }));
和邮递员图片一样,token最初是保存在cookie中的,在查看DB的时候,确认添加了一条记录。
通过validator库写了如下验证
const Validator = require("validator");
const isEmpty = (value) =>
value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0);
const registerValidator = (data) => {
let errors = {};
data.username = !isEmpty(data.username) ? data.username : "";
data.email = !isEmpty(data.email) ? data.email : "";
data.password = !isEmpty(data.password) ? data.password : "";
if (Validator.isEmpty(data.username)) {
errors.username = "유저네임을 입력해주세요.";
}
if (Validator.isEmpty(data.email)) {
errors.email = "이메일을 입력해주세요.";
}
if (Validator.isEmpty(data.password)) {
errors.password = "비밀번호를 입력해주세요.";
}
if (!Validator.isLength(data.password, { min: 6, max: 30 })) {
errors.password = "비밀번호는 6자 이상 30자 미만으로 작성해야합니다.";
}
return {
errors,
isValid: isEmpty(errors),
};
};
const loginValidator = (data) => {
let errors = {};
data.email = !isEmpty(data.email) ? data.email : "";
data.password = !isEmpty(data.password) ? data.password : "";
if (!Validator.isEmail(data.email)) {
errors.email = "Email is invalid";
}
if (Validator.isEmpty(data.email)) {
errors.email = "Email is required";
}
if (Validator.isEmpty(data.password)) {
errors.password = "Password is required";
}
return {
errors,
isValid: isEmpty(errors),
};
};
module.exports.registerValidator = registerValidator;
module.exports.loginValidator = loginValidator;
我该如何解决?帮助。
据我了解你的问题,你想验证数据库中电子邮件的唯一性。如果是这样,您可以在用户模型中添加一些代码:
// inside attributes definition of your model
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true // throws validation error if creating instance is already stored
} ...
因此,在您的代码中,您可以省略查找用户和检查电子邮件是否与请求的电子邮件匹配的部分。你只要写
await User.create(newUser) // if uniqueness validation fails it will throw error and no dublication would be in database
我使用了 bcrypt、cookie-parser、jsonwebtoken、validator... 库。
我正在使用 express、jwt 和 sequelize。
我现在的情况是在注册会员的时候,先加入到DB中
如果您再次创建一个帐户,它将被复制。
const bcrypt = require("bcrypt");
const { User } = require("../../models");
const jwt = require("jsonwebtoken");
const {
registerValidator,
loginValidator,
} = require("../../validation/authValidation");
require("dotenv").config();
exports.register = async (req, res) => {
const { errors, isValid } = registerValidator(req.body);
let { email, username, password } = req.body;
if (!isValid) {
return res.status(400).json(errors);
}
const emailExists = await User.findOne({ Where: { email: email } });
console.log(emailExists);
if (emailExists) {
return res.status(400).json({ message: "이미 사용중인 이메일입니다." });
}
const salt = await bcrypt.genSalt(10);
const hashedPassword = await bcrypt.hash(password, salt);
const newUser = {
username: username,
email: email,
password: hashedPassword,
};
User.create(newUser)
.then((save) => {
res.status(200).json({ status: "Success", new_user_id: save.id });
})
.catch((err) => res.status(500).json({ message: err + "잘안됩니다." }));
和邮递员图片一样,token最初是保存在cookie中的,在查看DB的时候,确认添加了一条记录。
通过validator库写了如下验证
const Validator = require("validator");
const isEmpty = (value) =>
value === undefined ||
value === null ||
(typeof value === "object" && Object.keys(value).length === 0) ||
(typeof value === "string" && value.trim().length === 0);
const registerValidator = (data) => {
let errors = {};
data.username = !isEmpty(data.username) ? data.username : "";
data.email = !isEmpty(data.email) ? data.email : "";
data.password = !isEmpty(data.password) ? data.password : "";
if (Validator.isEmpty(data.username)) {
errors.username = "유저네임을 입력해주세요.";
}
if (Validator.isEmpty(data.email)) {
errors.email = "이메일을 입력해주세요.";
}
if (Validator.isEmpty(data.password)) {
errors.password = "비밀번호를 입력해주세요.";
}
if (!Validator.isLength(data.password, { min: 6, max: 30 })) {
errors.password = "비밀번호는 6자 이상 30자 미만으로 작성해야합니다.";
}
return {
errors,
isValid: isEmpty(errors),
};
};
const loginValidator = (data) => {
let errors = {};
data.email = !isEmpty(data.email) ? data.email : "";
data.password = !isEmpty(data.password) ? data.password : "";
if (!Validator.isEmail(data.email)) {
errors.email = "Email is invalid";
}
if (Validator.isEmpty(data.email)) {
errors.email = "Email is required";
}
if (Validator.isEmpty(data.password)) {
errors.password = "Password is required";
}
return {
errors,
isValid: isEmpty(errors),
};
};
module.exports.registerValidator = registerValidator;
module.exports.loginValidator = loginValidator;
我该如何解决?帮助。
据我了解你的问题,你想验证数据库中电子邮件的唯一性。如果是这样,您可以在用户模型中添加一些代码:
// inside attributes definition of your model
email: {
type: DataTypes.STRING,
allowNull: false,
unique: true // throws validation error if creating instance is already stored
} ...
因此,在您的代码中,您可以省略查找用户和检查电子邮件是否与请求的电子邮件匹配的部分。你只要写
await User.create(newUser) // if uniqueness validation fails it will throw error and no dublication would be in database