1

我必须从 bcrypt 生成的哈希中重置密码...

hash = $2a$11$Ro/Y5GnkI6v1DkewwZAcBeZY7Q2a9872NUGDuXXes4J5SWfEQGHvG

问题是哈希有一个斜线......所以在我的路由器中

app.get('/getHash/:hash',routes.getResetHash);

我收到 404 错误!我认为问题是哈希中 $Ro 和 Y5G 之间的斜线,因为哈希尝试搜索这样的 url

app.get('/getHash/$2a$11$Ro/Y5GnkI6v1DkewwZAcBeZY7Q2a9872NUGDuXXes4J5SWfEQGHvG'.....

我怎样才能对哈希进行字符串化... ???

4

3 回答 3

4

您想要 URL 转义哈希。Javascript 有两个函数,encodeURI并且encodeURIComponent......你想要后者,因为你只想编码它的一个部分,包括斜杠:

uri_safe_hash = encodeURIComponent(hash)
于 2013-04-08T23:42:37.247 回答
1

用于encodeURIComponentURI 转义特殊字符,如/,&?. 在这种情况下,您的哈希将像这样包装:

var hash = encodeURIComponent('$2a$11$Ro/Y...872NUGDuXXes4J5SWfEQGHvG');

在服务器端,它应该自动重新转换转义参数,但您需要检查。

于 2013-04-08T23:46:08.387 回答
1

你可以这样做:

app.get('/getHash/:hash1/:hash2', routes.getResetHash);

然后在 routes.getResetHash 你可以加入 hash1 和 hash2 参数:

routes.getResetHash = function(req, res){
  var hash = req.params.hash1 + '/' + req.params.hash2;
});
于 2013-04-09T00:07:26.327 回答