如何从websocket连接握手的头部解码cookie? (红宝石)

如何从websocket连接握手的头部解码cookie? (红宝石),第1张

概述我在EventMachine.run循环中运行Sinatra应用程序,在我的ws.onopen方法中,我希望检查握手标头的cookie,以确保传入的请求来自我的webapp的注册用户. 我的Sinatra应用程序包括以下内容: use Rack::Session::Cookie, :key => COOKIE_KEY, :path => ' 我在EventMachine.run循环中运行Sinatra应用程序,在我的ws.onopen方法中,我希望检查握手标头的cookie,以确保传入的请求来自我的webapp的注册用户.

我的Sinatra应用程序包括以下内容:

use Rack::Session::cookie,:key => cookie_KEY,:path => '/',:expire_after => 2592000,#30 days                            :secret => cookie_SECRET

我的ws.onopen方法看起来像这样(修剪)

ws.onopen { |handshake|  cookie,bakesale = handshake.headers['cookie'].split('=')  rack_cookie = Rack::Session::cookie.new(MyApp,{    :key => cookie_KEY,#30 days    :secret => cookie_SECRET  })  decoded = rack_cookie.coder.decode(bakesale)  puts "decoded: #{decoded}"}

cookie的值与我的cookie_KEY匹配就好了,但是解码的值是nil

我该如何解码传入的cookie数据?

– 一段时间之后 –

我把上面的内容稍微改了一下

ws.onopen { |handshake|  cookie,#30 days    :secret => cookie_SECRET,:coder => Rack::Session::cookie::Base64.new  })  puts rack_cookie.coder.decode(bakesale)}

和那些产出

?Q [????? OV ??????toZ 4-1 294cb6e2b95e9 ## V3 ???#C&安培;?F3#SC CSC#的CS c3sSCCs CCM;??FI“__ FLASH__ ; F {I“用户; FU:Moped :: BSO?㣤?&?V7D?B!

看起来需要编组.

但Marshal.load(rack_cookie.coder.decode(bakesale))抛出一个异常,说符号的转储格式错误(0x10)

– 甚至更久的时间 –

我也尝试了rack_cookie.coder.decode(bakesale.split(‘ – ‘).first)

结果导致了

?? H?d ???? =?d:ETI“E7ce599b294cb6e2b95e9?## v3 ???#c& F3#SC?CSC#CSS?c3sSCCs?cCm; FI”__ FLASH __; F {I“user; FU:助力车:: BSO㣤和放大器;????V7D乙!

正如您所看到的,存在一些细微差别,但无论哪种方式,我都需要以某种方式将其转换为有效的哈希值.

Marshal.load(rack_cookie.coder.decode(bakesale.split(‘ – ‘).first))仍会导致符号(0x10)转储格式错误.

所以我觉得我离我更近了,但还没有雪茄.

解决方法 答案是使用Rack :: Utils.unencode.

我现在有这个工作

Marshal.load(rack_cookie.coder.decode(Rack :: Utils.unescape(bakesale.split(‘ – ‘).first)))完美地解码我需要的哈希,允许我提取用户ID. W00t!

非常感谢用户spastorino在https://github.com/rack/rack/issues/551指出我指向正确的方向.

总结

以上是内存溢出为你收集整理的如何从websocket连接握手的头部解码cookie? (红宝石)全部内容,希望文章能够帮你解决如何从websocket连接握手的头部解码cookie? (红宝石)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存