簡體   English   中英

從crypto.randomBytes中排除某些字符的正確方法

[英]correct way to exclude certain characters from crypto.randomBytes

我有以下代碼,基於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)

這是您可以使用的NPM包

除此之外,你的代碼似乎很好。 如果您要調用.toString()而不指定"hex"或指定類似"ascii"類的東西,它就會像你的問題描述中那樣破壞。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM