node.js电子邮件验证令牌

时间:2014-08-14 02:22:21

标签: node.js mongodb mongoose

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

验证模型

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

这在我的db'verifytokens'集合中“部分”工作,对象不包含_userid,它们包含存储在_id中的_userid(user._id)

我的第一个问题是,如果没有“构造函数”

,我真的不明白这是如何工作的
var verificationToken = new verificationTokenModel({_userId: user._id});

以及如何将user._id存储为验证集合中的_userid

1 个答案:

答案 0 :(得分:0)

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

  • 第一个问题:

当你跑步时:

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

它创建了构造函数。

  • 关于第二个问题:

MongoDB始终使用名为“_id”的字段创建文档,因此,验证集合中的“_id”字段不是User集合中的“_id”字段。未插入_userid的原因是因为您有拼写错误:

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

其中“_userId”应为“userid”