【发布时间】:2019-12-29 08:52:08
【问题描述】:
用户注册后,我需要一个基本的电子邮件验证。
我的伪代码类似于
1.用户注册
2.他的数据存储在数据库中。
3.使用加密生成令牌。
4.token 然后发送到提供的电子邮件 ID。
5. 用户点击验证帐户的链接。
同时创建一个单独的 sequelize 架构来存储电子邮件 ID 和令牌。
现在我的问题是如何在我的项目中实现它
passport.use('local-signup', new LocalStrategy(
{
usernameField: 'email',
passwordField: 'password',
passReqToCallback: true // allows us to pass back the entire request to the callback
},
function (req, email, password, done) {
var generateHash = function (password) {
return bCrypt.hashSync(password, bCrypt.genSaltSync(8), null);
};
User.findOne({
where: {
email: email.toLowerCase()
}
}).then(function (user) {
if (user) {
return done(null, false, {
message: 'That email is already taken'
});
}
else {
var userPassword = generateHash(password);
var data =
{
email: email.toLowerCase(),
password: userPassword,
firstname: req.body.firstname,
lastname: req.body.lastname,
mobileno: req.body.mobileno,
//verified_email: false,
//verified_mob: false
};
User.create(data).then(function (newUser, created) {
if (!newUser) {
return done(null, false);
}
if (newUser) {
return done(null, newUser);
}
});
}
});
}
));
我是 nodejs 的新手,但据我所知,我想事情需要在
中实现if (newUser) {
return done(null, newUser);
}
感谢任何指导。
我的用户架构..
module.exports = function (sequelize, Sequelize) {
var User = sequelize.define('user', {
id: {
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
firstname: {
type: Sequelize.STRING,
notEmpty: true
},
lastname: {
type: Sequelize.STRING,
notEmpty: true
},
//username: { type: Sequelize.STRING },
//about: { type: Sequelize.TEXT },
mobileno: {
type: Sequelize.STRING
},
email: {
type: Sequelize.STRING,
validate: { isEmail: true }
},
password: {
type: Sequelize.STRING,
allowNull: false
},
last_login: {
type: Sequelize.DATE
},
verified_email: {
type: Sequelize.BOOLEAN,
defaultValue: false,
},
verified_mob: {
type: Sequelize.BOOLEAN,
defaultValue: false,
}
//status: { type: Sequelize.ENUM('active', 'inactive'), defaultValue: 'active' }
});
return User;
}
【问题讨论】:
-
首先,
User.create(data).then(function (newUser, created)这个then将只有一个值,即创建的用户。您可以处理catch块中的任何错误。我认为这篇文章codemoto.io/coding/nodejs/… 完全符合您的要求,请查看 -
var tokenSchema = sequelize.define('tokenSchema', { _userId: { type: Sequelize.STRING, required: true, ref: 'User' }, token: { type: Sequelize.STRING, required: true }, createdAt: { type: Sequelize.DATE, required: true, default: Date.now, expires: 43200 } });这个翻译是否适合架构
标签: node.js express sequelize.js passport.js email-validation