Como decodificar um cookie do cabeçalho de um handshake de conexão de websocket? (Rubi)

Eu estou correndo umSinatra app dentro de umEventMachine.run loop e na minhaws.onopen método gostaria de verificar ohandshake cookie do cabeçalho para garantir que a solicitação recebida seja proveniente de um usuário registrado da minha webapp.

MinhasSinatra aplicativo inclui o seguinte:

use Rack::Session::Cookie,  :key => COOKIE_KEY,
                            :path => '/',
                            :expire_after => 2592000, #30 days
                            :secret => COOKIE_SECRET

e meuws.onopen método se parece com isso (aparado)

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}"

}

O valor decookie corresponde ao meuCOOKIE_KEY muito bem, no entanto, o valor dedecoded énil

Como devo decodificar os dados do cookie recebido?

-- algum tempo depois --

Eu mudei o acima ligeiramente para

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)

}

e que saídas

?q?[?????ov??????to?Z???294cb6e2b95e9?##v3???#c&F3#SC?CSC#CSs?c3sSCCs?cCm;FI"__FLASH__;F{I" user;FU:Moped::BSO?㣤?&?V7D?B!

que parece que precisa de marshalling.

ContudoMarshal.load (rack_cookie.coder.decode(bakesale)) lança uma exceção, dizendodump format error for symbol(0x10)

- e ainda mais tempo depois -

Eu também tenteirack_cookie.coder.decode(bakesale.split('--').first)

que resultou em

??H?d????=?d:ETI"E7ce599b294cb6e2b95e9?##v3???#c&F3#SC?CSC#CSs?c3sSCCs?cCm;FI"__FLASH__;F{I" user;FU:Moped::BSO?㣤?&?V7D?B!

Então, como você pode ver, há uma pequena diferença, mas de qualquer forma eu preciso transformar isso em um hash válido.

Marshal.load (rack_cookie.coder.decode (bakesale.split ('-'). First)) ainda resulta emdump format error for symbol(0x10) de qualquer jeito.

Então eu sinto que estou mais perto, mas não tenho charuto ainda.

questionAnswers(1)

yourAnswerToTheQuestion