我通过POST请求发送令牌,但是当我在服务器上看到它们时,它与发送的内容不匹配。
"U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n"
< - 原创
"U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\\nNT+g\\n"
< - 结果
请注意\ n已替换为\\ n。当我进行令牌查找验证时,当然没有找到结果,因为我正在寻找的字符串不再是正确的字符串了!
我不确定为什么这个字符串会像这样自动更改或者如何纠正它。我只是通过这样的标准参数来访问它。
token.verify(params["token"])
编辑以进一步明确
我正在使用调试器gem从终端查看此内容。我启用了自动设置并显示params["token"]
而没有p或put。我不是想用\ n创建换行符。文字\n
是帖子中收到的字符串的实际部分。我使用散列和加密库随机生成一个令牌,字符串有时最终会包含这些字符。如果我从调试器终端运行token.verify(params["token"])
,由于在字符串中添加了额外的反斜杠字符,因此没有匹配,所以我从数据库中返回nil。
如果我直接从调试器终端运行token.verify("U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n")
,我会从数据库中获取正确的记录。这让我觉得Rack或Sinatra在我有机会触摸它之前会自动转义字符串中的“特殊”字符。
答案 0 :(得分:0)
这与Ruby处理特殊字符的方式有关。从irb你可以看到这样的快速检查。
"\\n" == '\n'
出乎意料;至少对我来说,这是正确的,因为它们被视为相同。我没有试图处理通过网络传输的特殊字符,而是最终只编写了64位编码。