gpt4 book ai didi

node.js - 使用快速 Passport 和 Sequelize 进行电子邮件验证

转载 作者:行者123 更新时间:2023-12-03 22:37:17 26 4
gpt4 key购买 nike

用户注册后,我需要进行基本的电子邮件验证。

我的伪代码类似于

1.用户注册

2.他的数据存储在数据库中。

3. token 是使用加密生成的。

4.token 然后发送到提供的电子邮件 ID。

5.用户点击链接账户被验证。

同时创建了一个单独的 sequelize 模式来存储电子邮件 ID 和 token 。

现在我的问题是如何在我的项目中实现这个

 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;

}

最佳答案

在任何情况下都不要与您的任何用户共享您的 token 。用户 ID 可以很容易地通过 token 提取,这可能是有害的。

相反,尝试这种方法;

  • 我假设你的用户模型在你的数据库中是这样的
  • {
    name: String,
    auth: {
    password: String //This will be bcrypted.
    email: {
    address: String,
    verified: String || Boolean,
    }
    }
    }
  • 如您所见,已验证字段包含字符串字段或 bool 字段。
  • 在你创建用户的那一刻,(model.create({...}) sequence) 将verified 的值预设为当前时间的sha256(你可以使用sha256(moment().format()))并保存用户。
  • 在邮件中,向用户发送一个链接,如 yoursite.com/verify?code=[code] 然后是
  • 在 Controller 中为 user/verify?code=[code] 创建路由。获取用户获取用户在已验证字段中持有的代码并将其更改为“true”

  • 你完成了。

    关于node.js - 使用快速 Passport 和 Sequelize 进行电子邮件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57636298/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com