gpt4 book ai didi

ruby - 如何强制 Rack :session + sinatra to read "rack.session" from params instead of cookies

转载 作者:数据小太阳 更新时间:2023-10-29 07:08:15 27 4
gpt4 key购买 nike

我正在处理 oauth 1.0(twitter 和 flickr)。网站工作在80端口,oauth服务器工作在8080端口

算法:

  1. 向oauth服务器发送ajax请求以检查用户是否有有效的access_token
  2. 如果用户没有 access_token 或 access_token 已过期,则打开授权窗口
  3. 在 oauth 服务器的用户 session 中保存 access_token
  4. 发送分享数据到oauth服务器

它使用sinatra + rack:session + rack::session::sequel + sqlite来存储session。它在每个响应中发送 Set-Cookie: rack.session=id

我正在使用 2 种类型的请求:使用 jquery 的跨域 ajax 和使用 window.open 的常规请求。我有一个很大的安全问题将 cookie 传递给跨域 ajax 请求。

无论服务器的响应头包含什么

Access-Control-Allow-Headers: *

chromium 会抛出安全错误:

Refused to set unsafe header "Cookie"

我想通过传递 rack.session=id 来发布数据并加载它来避免这个问题:

before "/twitter/connect.json" do
session = Rack::Session::something(params["rack.session"])
end

但我无法在文档中找到如何执行此操作

最佳答案

Rack::Session::Abstract::ID 有一个名为 cookie_only 的选项 allows the session id to be passed in via the params .然而,它defaults to true和大多数 session 中间件实现 don't bother to override it .

你最好的选择可能是对 Rack::Session::Abstract::ID 进行猴子修补,将 cookie_only 默认为 false。

Rack::Session::Abstract::ID::DEFAULT_OPTIONS.merge! :cookie_only => false

关于ruby - 如何强制 Rack :session + sinatra to read "rack.session" from params instead of cookies,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13564290/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com