在Node中创建唯一的API密钥以存储在Redis中

时间:2014-12-14 06:59:59

标签: node.js redis node-redis

我正在Node中构建一个API,并希望在Redis中存储API密钥/访问令牌。

我如何才能最好地生成一个唯一的API密钥/访问令牌,以便将Redis存储为密钥,将电子邮件地址存储为值?

Redis是否具有内置函数,用于生成具有特定长度和字符集的唯一ID,或者我应该如何最好地解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:1)

Redis的INCR command允许您递增计数器,从而生成唯一的数字ID。 据我所知,redis中没有其他内置功能可以生成唯一ID。

如果您需要更复杂的ID,则必须在节点中生成它,就像评论中的Brendan所说的那样。您可以将redis INCR组合起来生成数值,然后将其提供给hashids等库。

答案 1 :(得分:1)

像达里尔·韦斯特所说的那样,你绝对应该在节点中生成令牌。但是,如果您不想依赖uuid,那么您始终可以使用node的内置crypto来创建随机字节并转换为字符串。

var crypto = require('crypto')

function generateToken() {
  return crypto.randomBytes(48).toString('base64');
}

有关详细信息,请参阅crypto.randomBytes(size[, callback])

答案 2 :(得分:0)

redis中唯一ID的一个很好的解决方案,特别是对于多个redis实例,是使用域名和uuid的组合(参见Brendan的回复)。因此,对于插入域名为“User”的新用户的应用程序,您将创建如下ID:

var uuid = require('node-uuid');

var createUniqueId = function() {
    return 'User:' + uuid.v4();
};

此方法的其他示例针对leveldb进行了描述here,但适用于redis。