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??????to?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.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage