2014-02-09 45 views
0

我通過POST請求發送了令牌,但是當我在服務器上看到它們時,它與發送的內容不匹配。字符串內的字符被自動轉義

"U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n" < - 原始 "U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\\nNT+g\\n" < - 結果

注意,\ n所取代\\ñ。當我進行令牌查找驗證時,當然沒有找到結果,因爲我正在查找的字符串不再是正確的字符串!

我不知道爲什麼這個字符串正在被自動更改像這樣或相當如何糾正它。我只是通過像這樣的標準參數來訪問它。

token.verify(params["token"])

EDIT爲進一步澄清

我是從終端使用調試器寶石查看此。我有自動啓用和顯示params["token"]沒有p或放。我不想用\ n創建換行符。文字\n是帖子中收到的字符串的實際部分。我使用散列和加密庫隨機生成一個令牌,並且這些字符串有時最終會包含這些字符。如果我從調試器終端運行token.verify(params["token"]),由於沒有匹配,因爲額外的反斜槓字符被添加到字符串中,所以我從數據庫取回零。

如果我直接從調試器終端運行token.verify("U2FsdGVkX1+pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm\nNT+g\n"),我會從數據庫中得到正確的記錄。這讓我想到Rack或Sinatra會在我有機會觸碰它之前自動逃離弦中的「特殊」角色。

+0

令牌正在被轉義,你能用發送'post'請求的代碼更新問題嗎? – fmendez

+0

據我所知,它不會被髮送。我目前只是通過curl使用post請求來測試,因爲我正在構建我的API。 'curl --data「token = U2FsdGVkX1 + pxBHFdSU4NiSIOdR2GCCBr/WF7AOSF5zQjRqjSoTeOKR0Dzwm \ nNT + g \ n」http:// localhost:4567/auth/verify_token' – bigtunacan

+0

您是如何查看結果的?如果你正在做'p params [「token」]'',那麼當顯示字符串時,Ruby會通過加倍來逃避'''',但是「真實」字符串將只有單個字符。另外請注意,curl不會將'\ n'作爲文字發送,而不是作爲換行符,因此您可能需要更改使用curl的方式(不清楚發送換行符或文字是否是\ n)。 – matt

回答

0

這與Ruby處理特殊字符的方式有關。從irb你可以看到這個像這樣的快速檢查。

"\\n" == '\n' 

沒想到;至少對我來說,這是對的,因爲對待他們是一樣的。我沒有試圖處理通過電線傳來的特殊字符,而是最終編碼了一切。

+0

在Ruby中,單引號中的字符串沒有應用轉義序列。 「\ n」是一個換行符,'\ n'是一個反斜槓,後跟一個n,恰好與「\\ n」相同。 – ZiggyTheHamster