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