зашифрованная строка запроса в рельсах электронной почты - PullRequest
1 голос
/ 26 декабря 2011

Мое приложение отправляет электронное письмо с URL-адресом. URL содержит атрибут строки запроса, который зашифрован. Я CGI избежал зашифрованного значения, так что символы, такие как + *. и т. д. Экранированный URL-адрес появляется в электронном письме, как и ожидалось, но когда мы нажимаем на ссылку, зашифрованные значения расшифровываются.

Например, URL в письме выглядит следующим образом http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4

электронная почта = 5M% 2BjE1G6UB26tw / Ач% 2Bzr1% 2BJSSxeAoP6j

когда мы нажимаем на эту ссылку, URL в браузере выглядит как http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M+jE1G6UB26tw/Ah+zr1+JSSxeAoP6j&owner_id=4

электронная почта = 5M + jE1G6UB26tw / Ах + ZR1 + JSSxeAoP6j

Знак + заменяется пробелом. В следствии params [: электронная почта] = 5M jE1G6UB26tw / Ah zr1 JSSxeAoP6j

что дает мне 404.

Есть ли способ, которым я могу избежать этой ситуации. Как сделать так, чтобы URL-адрес в браузере также отображался как

http://development.com/activate/snJAmJxkMo3WZ1sG27Aq?album_id=2&email=5M%2BjE1G6UB26tw/Ah%2Bzr1%2BJSSxeAoP6j&owner_id=4

в браузере?

1 Ответ

0 голосов
/ 28 декабря 2011

Чтобы избежать этой ситуации, я шестнадцатерично закодировал атрибут электронной почты, чтобы он содержал только буквы и цифры.Используются эти методы шестнадцатеричного кодирования и декодирования.

convert string2hex:
def hexdigest_to_string(string)
 string.unpack('U'*string.length).collect {|x| x.to_s 16}.join
end

convert hex2string
def hexdigest_to_digest(hex)
 hex.unpack('a2'*(hex.size/2)).collect {|i| i.hex.chr }.join
end
...