gpt4 book ai didi

node.js 电子邮件验证 token

转载 作者:可可西里 更新时间:2023-11-01 09:17:06 29 4
gpt4 key购买 nike

我正尝试根据这篇博文在 Mongoose、Express Node 应用程序中设置验证步骤... http://danielstudds.com/adding-verify-urls-to-an-express-js-app-to-confirm-user-emails-secure-spa-part-6/那篇文章已有一年多了,所以它是“节​​点电子邮件验证”的第一个谷歌结果,这让我有点惊讶。我对 Node 很陌生,所以我依赖示例。根据那篇文章,我没有看到下载,所以我将它拼凑起来以适应我的场景,这就是我的代码。

验证模型

var mongoose = require('mongoose'),
uuid = require('node-uuid'),
User = require('mongoose').model('User');

var verificationTokenSchema = new mongoose.Schema({
_userid : { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
token: {type: String, required: true},
createdAt: {type: Date, required: true, default: Date.now, expires: '4h'}
});

verificationTokenSchema.methods = {
createVerificationToken : function (done) {

var verificationToken = this;
var token = uuid.v4();
verificationToken.set('token', token);
verificationToken.save( function (err) {
if (err) return done(err);
return done(null, token);
});
}
};

exports.verifyUser = function(token, done) {
verificationTokenModel.findOne({token: token}, function (err, doc){
if (err) return done(err);
User.findOne({_id: doc._userId}, function (err, user) {
if (err) return done(err);
user["verified"] = true;
user.save(function(err) {
done(err);
});
});
});
};


var verificationTokenModel = mongoose.model('VerificationToken', verificationTokenSchema);
exports.verificationTokenModel = verificationTokenModel;

然后在我的用户模型中,我这样调用 create ..

用户模型

exports.createUser = function(req, res, next) {
// Do all the stuff that creates the user save it and get the id back
var verificationToken = new verificationTokenModel({_userId: user._id});
verificationToken.createVerificationToken(function (err, token) {
if (err){
err = new Error("Couldn't create verification token");
res.status(400);
return res.send({reason:err.toString()});
}

// Do stuff with the token here and email

这在我的数据库“verificationtokens”集合中“部分”起作用对象不包含_userid它们包含存储在_id中的_userid(user._id)

我的第一个问题是,当没有“构造函数”时,我真的不明白它是如何工作的

var verificationToken = new verificationTokenModel({_userId: user._id});

我如何才能将 user._id 作为 _userid 存储在验证集合中

最佳答案

我不使用 Mongoose,但这是它发生的事情:

  • 第一个问题:

当你运行时:

var verificationTokenModel = mongoose.model('VerificationToken', verificationTokenSchema);

它创建构造函数。

  • 对于第二个问题:

MongoDB 总是创建带有名为“_id”的字段的文档,因此,验证集合中的“_id”字段不是用户集合中的“_id”字段。未插入 _userid 的原因是您输入错误:

var verificationToken = new verificationTokenModel({_userId: user._id});

其中“_userId”应该是“userid”

关于node.js 电子邮件验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25299079/

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