2

我正在使用 node.bcrypt.js 哈希返回 node.js 中的十六进制数字作为密码重置令牌。

user.reset_password_token = require('crypto').randomBytes(32).toString('hex'
);

在将令牌传递到 url 之前,我是否还应该对令牌进行 base64 编码(即:链接重置电子邮件)?

这样做有什么好处吗?

我似乎记得 base64 编码可以包含会弄乱路径的正斜杠:

   var token = user.reset_password_token;

   //is there any benefit to doing base64 encoding?
   var encoded_token = new Buffer(token).toString('base64');

   var reset_link = 'http://example.com/reset/'+ encoded_token;
   sendResetLink( reset_link );
4

4 回答 4

6

我在https://www.npmjs.org/package/urlsafe-base64使用 URLSafeBase64 nodejs LIB 解决了它

var email =email_lines.join("\r\n").trim();
var base64EncodedEmail = URLSafeBase64.encode(new Buffer(email));
gmail.users.messages.send({userId:"me",
        resource: {raw:base64EncodedEmail} }, callbackFn});
于 2014-11-03T20:36:06.780 回答
2

您不需要第三方库。您可以只使用base64url编码(从 开始nodejs v14

const encoded_token = Buffer.from(token).toString('base64url');
于 2022-02-09T11:43:43.280 回答
0

base64确实可以包含正斜杠,但base32不能!

于 2012-09-27T22:36:31.740 回答
0

另一种选择是base64url 库

base64url("ladies and gentlemen we are floating in space");
// bGFkaWVzIGFuZCBnZW50bGVtZW4gd2UgYXJlIGZsb2F0aW5nIGluIHNwYWNl
于 2019-02-25T04:07:05.737 回答