wyślę adres e-mail jako signed cookie:Jak odszyfrować `.signed`, gdy zaszyfrowana wartość znajduje się w nagłówku http zamiast w pliku cookie?
cookies.signed[:user_email] = { value: user.email, expires: 24.hours.from_now }
Później frontend wysyła go z powrotem do mnie jako nagłówka HTTP:
request.headers["HTTP_USER_EMAIL"]
Jak następnie odszyfrować z odebranego nagłówka do oryginału adres e-mail? Próbowałem wiersz poniżej, ale to powoduje błąd:
NoMethodError Exception: undefined method `signed' for #String:0x00000008a57a78
email = request.headers["HTTP_USER_EMAIL"].signed unless (request.headers["HTTP_USER_EMAIL"] == nil)
Z debugger
uzyskać wartość request.headers["HTTP_USER_EMAIL"]
z "Im9yZ29utcGxlLmNvbSI=--37ddc725d139f86095ae839012c31a14e"
. Tak więc jest zaszyfrowana wartość.
Wartość różnicy w pliku cookie w porównaniu z nagłówkiem: Jeśli zaszyfrowana wartość zostanie znaleziona w pliku cookie, można ją odszyfrować, używając cookies.signed[:http_user_email]
. Moje próby request.headers["HTTP_USER_EMAIL"].signed
i request.headers.signed["HTTP_USER_EMAIL"]
są zasadniczo takie same, jak w przypadku plików cookie, które można wziąć zaszyfrowaną wartość pliku cookie i dodać .signed na końcu: "Im9yZ29utcGxlL".signed
. I to też nie działa. Ale jak to zrobić, jeśli zaszyfrowana wartość znajduje się w ciągu znaków?
Czy uważasz, że nie ma potrzeby używania zaszyfrowanej wersji adresu e-mail użytkownika do uwierzytelniania API? Uwierzytelnianie odbywa się na podstawie kombinacji adresu e-mail i tokena (token musi pasować do skrótu, który jest zaszyfrowaną wersją tokena).
dla mnie 'example @ example.com' jest już oryginalnym adresem e-mail. Sidenote, zamiast pisać 'request.headers [" HTTP_USER_EMAIL "] == nil' możesz użyć' nil? 'Method:' request.headers ["HTTP_USER_EMAIL"]. Nil? ' –
Dzięki, rzeczywiście istniał problem w wartość dałem to w moim teście. Zaktualizuję mój OP komunikatem o błędzie. – Nick
wypróbuj 'Rack :: Session :: Cookie :: Base64 :: Marshal.new.decode (request.headers [" HTTP_API_USER_EMAIL "])' –