我想生成令牌作为用户id并存储在数据库中,但是如何生成唯一的令牌呢?
我应该加时间戳var currentUnixTimestamp = (new Date().getTime() / 1000);作为盐吗?密码怎么办?

var generateToken = function() {
      return new Promise(function (fulfill, reject){
        crypto.randomBytes(8, function(error, buf) {
          if (error) {
            reject(error);
          } else {
            var token = buf.toString('hex');
            fulfill(token);
          }
        });
      });
    };

最佳答案

一个正确种子的加密库中的8个随机字节发生冲突的几率很低,因此您通常不需要担心重复的字节。事实上,增加到16字节,代码就可以与UUID version 4媲美了。这被认为是uuid的标准。相撞的可能性很小,通常不值得考虑。
不过,如果您要走这么远,可以考虑使用标准格式uuid,例如the node package "uuid"。还有一些数据库端的uuid函数,可以作为默认值添加到模式中,例如in Postgres。它的优点是为您的id提供了一种标准化且易于理解的格式,您不需要花费任何时间来证明或维护您的代码,只需将开发人员指向标准文档即可。

关于node.js - 生成用户ID的随机唯一 token ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31901306/

10-16 17:25