javascript - 从 crypto.randomBytes 中排除某些字符的正确方法

标签 javascript node.js coffeescript

我有以下代码,基于 http://nodejs.org/docs/v0.6.9/api/crypto.html#randomBytes

crypto.randomBytes 32, (ex, buf) ->
  user.tokenString = buf.toString("hex")
  user.tokenExpires = Date.now() + TOKEN_TIME
  next()

我正在使用它生成一个 tokenString 以用于 node.js/express 用户验证。

在某些情况下,生成的 tokenString 包含“/”正斜杠字符,这会破坏我的路由,例如,如果 tokenString 类似于 '$2a$10$OYJn2r/Ts.guyWqx7iJTwO8cij80m.uIQV9nJgTt18nqu8lT8OqPe' 找不到 /user/activate/$2a$10$OYJn2r 并且我收到 404 错误

是否有更直接的方法来在生成 crypto.randomBytes 时排除某些字符?

最佳答案

Crypto.randomBytes 生成随机字节。这与字符无关,字符是由我们查看字节的方式决定的。

例如:

user.tokenString = buf.toString("hex")

将缓冲区转换为字符串(其中两个字符代表每个字节),字符范围为0-9a-f

另一种(可能更合适的方法是使用更紧凑的编码。Base64Url 是一种提供 URL/文件名安全的字符串编码的编码

user.tokenString = base64url(buf)

这里是an NPM package you can use for it .

除此之外,你的代码看起来不错。例如,如果您要调用 .toString() 而不指定 "hex" 或指定诸如 "ascii" 之类的内容,它就会像下面这样中断:在您的问题描述中。

关于javascript - 从 crypto.randomBytes 中排除某些字符的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16629788/

相关文章:

javascript - 从 javascript 数组中删除元素的简洁方法(使用 jQuery、coffeescript)

javascript - 我需要创建一个四位数字的输入(所有数字都应该不同,第一个数字应该是 1)

javascript - 如何在 express、couchDB 和 node.js 中使用 session

node.js - 完成前浏览器同步与刷新

node.js - Kubernetes node.js 容器无法连接到 MongoDB Atlas

javascript - 在 Coffeescript 中调用方法并传递适当的上下文

node.js - 从 CoffeeScript Node 应用程序生成的 cake js 文件应该放在哪里?

javascript - AngularJS 选择 |从 JSON 中选择一个 id 后显示该 id 的其余信息

Javascript:很好的人类可读列表连接

javascript - 为 jqGrid 使用自定义 JSON 格式