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 を生成しています。

場合によっては、生成されたトークン文字列に「/」スラッシュ文字が含まれており、これによりルートが壊れます。たとえば、トークン文字列が$2a$10$OYJn2r/Ts.guyWqx7iJTwO8cij80m.uIQV9nJgTt18nqu8lT8OqPe/user/activate/$2a$10$OYJn2r

crypto.randomBytes を生成するときに、特定の文字が含まれないようにするより直接的な方法はありますか?

4

1 に答える 1

3

Crypto.randomBytes はランダムなバイトを生成します。それは文字とは関係ありません。文字は、バイトの見方によって決まります。

例えば:

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

文字範囲内で、バッファーを文字列 (各バイトを表す 2 文字) に変換します。0-9a-f

別の (より適切なアプローチは、よりコンパクトなエンコーディングを使用することです。Base64Url は、URL/ファイル名に対して安全な文字列エンコーディングを提供するエンコーディングです)

user.tokenString = base64url(buf)

これに使用できる NPM パッケージを次に示します。

それ以外は、あなたのコードは問題ないようです。たとえば、次のようなものを指定または指定.toString()せずに呼び出すと、質問の説明と同じように壊れます。"hex""ascii"

于 2013-05-18T23:05:17.777 に答える