2013-05-18 71 views
0

排除某些字符我已經基於http://nodejs.org/docs/v0.6.9/api/crypto.html#randomBytes正確的方式從crypto.randomBytes

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

下面的代碼,我用這來產生tokenString要用於node.js的/ Express用戶驗證。

在某些情況下,tokenString產生

包括「/」斜槓字符,這打破了我的路線,例如,tokenString如果tokenString就像是「$2a$10$OYJn2r/Ts.guyWqx7iJTwO8cij80m.uIQV9nJgTt18nqu8lT8OqPe」無法找到/user/activate/$2a$10$OYJn2r和我得到一個404錯誤

是否有更直接的方法來排除生成crypto.randomBytes時包含某些字符?

+0

您確定這是您正在使用的代碼嗎?再讀一遍,'buf.toString(「hex」)'指定生成的字符串是兩個字符對每個字符進行編碼的緩衝區。它應該只在0-9a-f的範圍內,並且應該可以工作。 –

+0

是的,我只是執行1000次獲得隨機字節的迭代並將它們轉換爲字符串(「hex」),它們全部匹配[a-f0-9]。 –

回答

1

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"之類的內容,則會像您的問題描述中那樣斷開。

+0

不錯的一個,謝謝 – khinester

+0

@khinester我更新了我的答案,以便與問題更相關。如果您認爲它解決了您的問題,請考慮接受它。 –

+0

是的,我昨天試圖接受它,但不得不等待。感謝您的意見。 – khinester