微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Node.js:Mongoose模式默认的rand-tokens不是随机的

我有这样的UserSchema,我似乎无法生成独特的随机activation_token.

我正在使用rand-token进行生成. Found here.

var UserSchema = new Schema({
        activation_token: {
            type: String,default: randToken.generate(64),},email: {
            type: String,unique: true,sparse: true
        },first_name: {
            type: String
        },last_name: {
            type: String
        }
});

似乎工作正常,但在使用Mocha运行单元测试时,所有的activation_token字段都是相同的.我最初认为这与时间有关,因为这可能是用于生成令牌的内容.对于每个新文档,时间戳可能是相同的,所以我使用一个函数生成了一些测试,这个函数一个一个生成了大约30个令牌,并且它们不相似.

关于这里发生了什么的任何想法?

以下是该问题的一些示例:

{
    "_id": {
        "$oid": "555dfd137c914edc1b41bbda"
    },"email": "oka@haek.io","first_name": "Lenora","last_name": "Aguilar","date_added": {
        "$date": "2015-05-21T15:43:01.576Z"
    },"activation_token": "EyBNwu4vxOIXMzj7W5kVOeICfWwxfjXmHkz7ZPHLjkf0MU86QM2aIKNDyvI2YmTR","__v": 0
},{
    "_id": {
        "$oid": "555dfd107c914edc1b41bbd6"
    },"email": "ediuki@mu.edu","first_name": "Eugene","last_name": "Green","__v": 0
}

解决方法

它们都是一样的,这是有意义的.您在模式定义时调用生成一次,并且您将该调用的结果提供给mongoose模式定义,而不是函数本身.你可以尝试这样的事情:

var UserSchema = new Schema({
    activation_token: {
        type: String,default: function() {
            return randToken.generate(64);
        }
    },email: {
        type: String,sparse: true
    },first_name: {
        type: String
    },last_name: {
        type: String
    }
});

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐