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

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

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

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

谢谢!

Redis的INCR命令允许您增加一个计数器,并生成唯一的数字ID。 据我所知,在redis中没有其他内置function来生成唯一的ID。

如果你需要更复杂的ID,你必须在节点上生成它,就像Brendan在评论中所说的那样。 你可以结合redis INCR来生成数值,然后把它提供给像hashids这样的库。

就像Darryl West所说,你一定要在节点中生成令牌。 但是,如果您不想依赖uuid则始终可以使用节点的内置crypto来创build随机字节并将其转换为string。

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

请参阅crypto.randomBytes(size [,callback])以获取更多信息。

对于redis中独特的id,尤其是多个redis实例,一个很好的解决scheme是使用域名和uuid的组合(参见Brendan的回复)。 因此,对于插入新用户的域名为“User”的应用程序,您可以创build一个如下所示的ID:

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

这个方法的其他例子在这里描述leveldb,但适用于redis。