我正在Node中构建一个API,并希望在Redis中存储API密钥/访问令牌。
我如何才能最好地生成一个唯一的API密钥/访问令牌,以便将Redis存储为密钥,将电子邮件地址存储为值?
Redis是否具有内置函数,用于生成具有特定长度和字符集的唯一ID,或者我应该如何最好地解决这个问题?
谢谢!
答案 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。