Wie decodiere ich ein Cookie aus dem Header eines Websocket-Verbindungs-Handshakes? (Rubin)
Ich leite eineSinatra
App innerhalb einesEventMachine.run
Schleife und in meinemws.onopen
Ich möchte die Methode überprüfenhandshake
Header-Cookie, um sicherzustellen, dass die eingehende Anfrage von einem registrierten Benutzer meiner Web-App kommt.
MeineSinatra
App beinhaltet Folgendes:
use Rack::Session::Cookie, :key => COOKIE_KEY,
:path => '/',
:expire_after => 2592000, #30 days
:secret => COOKIE_SECRET
und meinws.onopen
Methode sieht so aus (beschnitten)
ws.onopen { |handshake|
cookie, bakesale = handshake.headers['Cookie'].split('=')
rack_cookie = Rack::Session::Cookie.new(MyApp, {
:key => COOKIE_KEY,
:path => '/',
:expire_after => 2592000, #30 days
:secret => COOKIE_SECRET
})
decoded = rack_cookie.coder.decode(bakesale)
puts "decoded: #{decoded}"
}
Der Wert voncookie
passt zu meinemCOOKIE_KEY
gut, aber der Wert vondecoded
istnil
Wie soll ich die eingehenden Cookie-Daten entschlüsseln?
-- etwas später --
Ich habe das oben etwas geändert
ws.onopen { |handshake|
cookie, bakesale = handshake.headers['Cookie'].split('=')
rack_cookie = Rack::Session::Cookie.new(MyApp, {
:key => COOKIE_KEY,
:path => '/',
:expire_after => 2592000, #30 days
:secret => COOKIE_SECRET,
:coder => Rack::Session::Cookie::Base64.new
})
puts rack_cookie.coder.decode(bakesale)
}
und das gibt aus
?q?[?????ov??????to?Z???294cb6e2b95e9?##v3???#c&F3#SC?CSC#CSs?c3sSCCs?cCm;FI"__FLASH__;F{I" user;FU:Moped::BSO?㣤?&?V7D?B!
das sieht so aus, als müsste es rangiert werden.
jedochMarshal.load (rack_cookie.coder.decode(bakesale))
wirft eine Ausnahme und sagtdump format error for symbol(0x10)
- und noch mehr Zeit später -
Ich habe es auch versuchtrack_cookie.coder.decode(bakesale.split('--').first)
Was dazu geführt hat
??H?d????=?d:ETI"E7ce599b294cb6e2b95e9?##v3???#c&F3#SC?CSC#CSs?c3sSCCs?cCm;FI"__FLASH__;F{I" user;FU:Moped::BSO?㣤?&?V7D?B!
Wie Sie sehen, gibt es einen kleinen Unterschied, aber so oder so muss ich das irgendwie in einen gültigen Hash umwandeln.
Marshal.load (rack_cookie.coder.decode (bakesale.split ('-'. First)) ergibt nochdump format error for symbol(0x10)
in jedem Fall.
Also fühle ich mich näher, aber noch keine Zigarre.