当前位置 : 主页 > 网页制作 > Nodejs >

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

来源:互联网 收集:自由互联 发布时间:2021-06-16
我有这样的UserSchema,我似乎无法生成独特的随机activation_token. 我正在使用rand-token进行生成. Found here. var UserSchema = new Schema({ activation_token: { type: String, default: randToken.generate(64), }, email: {
我有这样的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",
    "date_added": {
        "$date": "2015-05-21T15:43:01.576Z"
    },
    "activation_token": "EyBNwu4vxOIXMzj7W5kVOeICfWwxfjXmHkz7ZPHLjkf0MU86QM2aIKNDyvI2YmTR",
    "__v": 0
}
它们都是一样的,这是有意义的.您在模式定义时调用生成一次,并且您将该调用的结果提供给mongoose模式定义,而不是函数本身.你可以尝试这样的事情:

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