Tag: 跨域

从Rails设置document.domain的DRY方式

我有一个Rails应用程序,它使用两个想要用JavaScript进行通信的子域。 什么是最有效地设置document.domain = mydomain.com ? 使它不那么直接的条件 在域为localhost的开发或测试环境中,这不应该是一个问题。 这也需要在不加载主JavaScript文件的某些页面上设置 条件1让我认为我要么依赖于一个正在解析location.host的根域的正则表达式,要么在erb进行切换。 条件2让我觉得最好写一次并把它放在资产管道中并在必要时包含它。 最佳潜在解决方案 创建一个类似domain_setter.js.erb的文件(下面的内容),将其添加到预编译列表,并将其包含在所有必要的位置(清单中的\\= require domain_setter或没有清单的页面的javascript_include_tag ‘domain_setter’ )。 document.domain = ‘mydomain.com’; 更新当前解决方案 此解决方案更具动态性,不需要对域进行硬编码。 仍然不是最好的,但它的工作…… 主要是 : – / (function() { var domain = /^(?:https?\:\/\/)?.*?([^.]+\.[^.]+?)(?:\:\d+)?$/.exec(location.host); if (domain == null) { document.domain = ‘localhost’; } else { document.domain = domain[1]; } })(); TL;博士 使用Rails设置多个页面的document.domain的DRY方法是什么?

如何在Rails中的单独域上设置cookie

如何在通过javascript调用调用我的网站的其他域上设置cookie? 它适用于FF3,但不适用于IE6。 我的服务器是从单独的站点和域上的javascript标记调用的。 结果返回用数据填充页面的javascript(它是一个小部件)。 我正在尝试使用domain =“。mydomain.com”和path =“/”设置cookie。 它适用于Firefox,但不适用于IE。 如果我测试来自我自己的域的javascript调用,它在IE中工作正常。 有谁知道如何使用Rails在IE中使用跨域cookie设置?

Rails,Devise和多个域

假设我有一个应用程序将从完全不同的域访问,这些域都指向同一台服务器*: example.com,example.net,f​​oobar.com,… 我有一个基于Devise的身份validation系统,之前运行良好。 但是,现在的目标是将HTTPS添加到登录系统中。 问题是,事实certificate,没有办法在同一个IP地址上托管多个HTTPS网站**。 要解决此问题,我将登录页面设置为始终POST到https://secure.example.com 。 据我所知,这工作正常。 设计似乎没有任何疑虑。 然而,棘手的部分是用户现在需要被重定向到foobar.com,这也需要了解用户已登录。我通过网站返回登录表单中的隐藏参数,并重定向工作良好。 我仍无法通知foobar.com用户现已登录。 我已设法将其设置为在返回foobar.com后,将用户的secure.example.com会话cookie复制到foobar.com的新cookie中。 这部分工作正常。 但是,在Rails控制台中,web请求secure.example.com和foobar.com – 为每个发送相同的cookie – 产生两个完全不同的会话,因此,难怪Devise的行为就像用户从未登录过foob​​ar.com 有谁知道为什么这不起作用 – 为什么两个相同的Web请求(只有请求URI的域名不同 – 我也在Firebug中尝试过)会在Rails 3应用程序中生成两个完全不同的会话,但会有不同但一致的,会话ID? 更重要的是,有谁知道如何使这项工作? *为了本练习的目的,假设这是不可避免的,并且站点不能在不同的子域下托管,并且所需的域数太多,无法为每个域获取单独的IP地址。 **除非它们是子域名并且您拥有* .example.com证书,但这不是重点。

Rails,REST架构和HTML 5:具有飞行前请求的跨域请求

在开展项目以使我们的网站HTML 5友好时,我们渴望采用跨域请求的新方法(不再通过隐藏的iframe发布!!!)。 使用访问控制规范,我们开始设置一些测试来validation各种浏览器的行为。 当前的Rails RESTful架构依赖于四个HTTP谓词:GET,POST,PUT,DELETE。 但是,在访问控制规范中,它规定非简单方法(PUT,DELETE)需要使用HTTP谓词OPTIONS的飞行前请求。 此外,在测试期间,我们还发现了Firefox 3.5.8的飞行前POST请求。 我的问题是这个。 是否有人知道Rails框架的任何项目正在解决这个问题? 如果没有,有关支持OPTIONS方法的最佳策略的任何意见,因为它必须支持所有POST,PUT,DELETE方法的路由?

Ruby on Rails如何获取当前的URL?

我正在尝试使用request.host , request.url获取rails中的当前url,但我有一个位于2个域中的网站,因此: 当我在www.example1.com , request.host或.url显示www.example1.com 当我在www.example2.com , request.host或.url显示example1.com因为example2从example1获取所有内容并在example2中显示(已解析) 因为request.host得到了真正的主机,而request.url得到主机也是我真的需要在浏览器中获取url而不是主机,有人可以帮忙吗? OB:我正在使用rails 4和ruby 2 OBs2:request.domain不起作用,这只返回url的“.com”

如果用户未经授权,如何使用Devise发送CORS头(401响应)

我正在开发一个应用程序,其中服务器和api消费客户端位于不同的域下,所以我想使用CORS 。 为此,我必须在服务器响应中设置相应的http标头: def cors_set_access_control_headers headers[‘Access-Control-Allow-Origin’] = ‘http://localhost’ headers[‘Access-Control-Allow-Methods’] = ‘POST, GET, OPTIONS’ headers[‘Access-Control-Allow-Headers’] = ‘*, X-Requested-With, X-Prototype-Version, X-CSRF-Token, Content-Type’ headers[‘Access-Control-Max-Age’] = “1728000” end 此方法用作ApplicationController的before_filter 。 对于某些资源,用户必须经过身份validation和授权。 请求通过XHR / Ajax完成。 因此,如果用户未经过身份validation, Devise将向客户端发送401响应,而不是重定向到登录页面。 但是用于设置CORS头的filter不用于该响应。 因此,401响应不会发送给客户端。 我想在客户端捕获并使用401响应。 目前我使用的解决方法是不使用Devise身份validation方法,而是使用自定义身份validation代码段: def authenticate_cors_user if request.xhr? && !user_signed_in? error = { :error => “You must be logged in.” } render params[:format].to_sym […]

CORS – 不允许JSONP的跨域AJAX,允许在服务器上使用Origin

我在同一台服务器上有两个独立的应用程序,EmberJS试图对我的后端API进行跨域调用。 我设置了后端API以允许来自该特定来源的跨域请求。 但有没有办法避免在这样的设置中使用JSONP? $.ajax在发送之前阻止跨域请求。 如果没有,CORS有什么意义,我实现了哪些服务器端接受来自我的JS前端源的请求? 编辑 AJAX请求: $.ajax({ url: “api.lvh.me:3000/accounts/login”, data: cred, type: “POST”, xhrFields: { withCredentials: true }, success: function(response){ alert(‘succeeded!’); console.log(response); alert(response); }, failure: function(message){ alert(“failed”); console.log(message); alert(message); } });

在Rails 5中共享域之间的登录cookie /会话

要完全清楚,我绝对是指域之间的共享会话,而不仅仅是子域。 无论如何,想象Tumblr您可以通过转到.tumblr.com访问博客,但您也可以将其设置为使用自定义域。 我们正在尝试做类似的事情。 您可以照常访问我们网站的一部分,也可以进行设置,以便您可以使用自定义域访问您的网站部分。 这里的重要部分是无论使用什么域,它都由同一个盒子处理。 这不是SSO本身,因为我们只是从不同的域访问相同的Rails应用程序。 无论如何,问题是:最好的方法是,如果用户登录到我们的主站点,他们不必在通过自定义域访问我们的站点时再次登录。 从本质上讲,我们希望这样做,以便用户登录一次,无论用户访问我们网站的域名是什么,他们都会保持登录状态。 任何建议表示赞赏!

切换到新域名时保持用户会话(Ruby on Rails)

我的Rails应用程序目前在example.org上可用,但我想切换到example.com 在routes.rb执行通配符301重定向不是问题,但我也想保留用户会话 。 由于新域名无法访问旧域名的cookie,因此将用户重定向到新域名仍然有他/她登录的最佳(安全且尽可能简单)方法是什么? 我发现很multithreading都在谈论使用复杂的身份validation令牌方法设置跨域Web应用程序,但我正在寻找一次性单向迁移,所以我希望解决方案对此更简单。 有什么建议? 我正在使用Ruby on Rails 3,OmniAuth,并使用默认的’cookie_store’作为我的会话存储。