1

我有以下代码,基于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()

我正在使用它来生成用于 node.js/express 用户验证的 tokenString。

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

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

4

1 回答 1

3

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

例如:

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

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

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

user.tokenString = base64url(buf)

这是一个你可以使用的 NPM 包

除此之外,您的代码似乎还不错。如果您在.toString()没有指定"hex"或指定"ascii"例如的情况下打电话,它会像您的问题描述一样中断。

于 2013-05-18T23:05:17.777 回答