我将url路径中的随机字符串作为路由参数来实现重置密码。我后来在app.param中使用它。当随机字符串包含字符“/”时,应用程序无法正常工作。以下是我的实现
在models/mymodelname.js中
resetId = crypto.randomBytes(16).toString('base64');
在routes/mymodelname.js中
app.post('/resetpassword/:resetId',users.resetPassword);
有什么方法可以使用从随机字符串中获取的resetid作为路由参数吗?
最佳答案
以下是解决此问题的几种方法:
使用encodeURIComponent
函数将问题字符转换为其%XX
表示:
resetId = crypto.randomBytes(16).toString('base64');
// ...
resetIdEscaped = encodeURIComponent(resetId);
// Example: L73jflJreR%2FuivSdnMU5%2Fg%3D%3D
将buffer转换为字符串时,请使用十六进制编码而不是base64编码:
resetId = crypto.randomBytes(16).toString('hex');
// Example: 13e095f8967a1ba06d11eeeed616051d