Tag: cors

与Amazon S3和Cloudfront的CORS

我在Heroku上托管了一个Rails应用程序,它使用CloudFront和S3上托管的资产。 它完美地显示资产(虽然它需要一些摔跤)。 我对Cloudfront的设置: Forward Headers: Whitelist Whitelist Headers: Origin Forward Query Strings: No S3存储桶的CORS设置: * GET HEAD * 调用图像的JS(咖啡) @mousemove (e) -> ctx = $(“”).attr( width: @width height: @height )[0].getContext(“2d”) ctx.drawImage(this, 0, 0, @width, @height) # This is because firefox doesn’t support offset[X|Y] if(e.offsetX == undefined) xpos = e.pageX – $(this).offset().left; ypos = e.pageY – […]

从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方法是什么?

CORS问题与Rails 4,omniauth-facebook,rack-cors,Heroku

摘要: 我有一个CORS问题。 我正试图通过带有Rails API的React应用程序对Facebook进行身份validation。 我的应用程序在localhost:8080上运行,我的api在Heroku上运行。 我可以登录到facebook并在回调时创建一个会话,但是由facebook设置的cookie不会被omniauth选中。 我使用omniauth-facebook客户端身份validation。 我认为这个问题出现在我的机架式配置中。 当我在localhost:3000上运行我的api时,它可以工作。 之前,我收到了错误csrf-detected ,但是通过将provider_ignores_state: true添加到omniauth配置中解决了这个问题。 后来,我发现cors调用传递cookie需要xhrFields: { withCredentials: true } 。 最终解决方案:最后,我通过将我的应用程序部署到AWS 53并使用域example.com来解决此问题,并在Heroku上创建CNAMES’api.example.com`到我的api。 让CNAMES得到解决需要一天的时间。 您可以使用命令host example.com和host api.example.com在终端中测试您的设置。 替代解决方案是使用nginx作为代理。 版本: Rails 4.2.2 Omniauth-facebook 3.0.0 Omniauth-oauth2 1.4.0 Rack-cors 0.4.0 问题: Getting error: no_authorization_code. 路线: namespace :api do match “/auth/:provider/callback”, to: “sessions#create”, via: [:get, :post] get “/auth/failure”, to: “sessions#failure” get “/logout”, […]

“警告:无法validationCSRF令牌真实性”错误 – 使用Devise的CORS和:token_authenticatable

我有一个单页面应用程序使用CORSvalidation到另一个域。 所有请求都是JSON请求。 我的应用程序可以validation确定,可以使GET请求正常。 身份validation使用token_authenticatable。 即所有请求附加’?auth_token = whatever’ 所以,我的实际问题是,当我尝试执行PUT请求时,我得到一个警告:无法在rails日志中validationCSRF令牌真实性消息以及CanCan :: AccessDenied(您无权访问此页面。 )例外。 只需将skip_before_filter :verify_authenticity_token添加到rails控制器即可解决问题。 因此,我只能得出结论,我的ajax请求发送的是无效或空的csrf_token。 我真的不明白这是怎么回事,因为我相信我正确地发送了每个ajax请求的X-CSRF-Token报头。 基本上,我的应用程序validation并且Devise发送回auth_token和csrf_token: render :status => 200, :json => { :auth_token => @user.authentication_token, :csrf_token => form_authenticity_token } 然后我在我的ajax应用程序中存储这些标记,并在jQuery中使用ajaxSend ,设置它以便jQuery通过每个请求传递这些标记: initialize: -> @bindTo $(document), ‘ajaxSend’, @appendTokensToRequest appendTokensToRequest: (event, jqXHR, options) -> if not @authToken? then return if @csrfToken? jqXHR.setRequestHeader ‘X-CSRF-Token’, @csrfToken if options.type […]

Rails跨域ajax获取请求(CORS)

我正在尝试在我的rails应用程序中实现google places api。 这是我在尝试使用从ajax请求获取数据的函数时遇到的错误: XMLHttpRequest cannot load . Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:3000’ is therefore not allowed access. 我正在使用rack-cors gem,我已将此片段添加到我的config / application.rb文件中: config.middleware.insert_before 0, “Rack::Cors” do allow do origins ‘*’ resource ‘*’, :headers => :any, :methods => [:get, :post, :options] […]

如何从运行在不同端口上的本地AngularJS应用程序向本地Rails应用程序发出请求?

我正在开发一个带有AngularJS前端和Rails后端的Web应用程序。 我的目标是保持两者完全分离,因为Rails应用程序最终将降级为简单的REST服务器,而AngularJS前端将只是使用后端的几个不同客户端之一。 出于这个原因,我不想将前端集成到Rails资产管道或类似的管道中。 Rails应用程序在端口3000上本地运行。前端使用Gulp编译静态资产,而BrowserSync包含我在端口3001上运行的开发服务器。 出于开发目的,我如何让AngularJS应用程序与Rails服务器通信,避免在通过Angular的$ http服务发出HTTP请求时出现此浏览器错误(我预期)? No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:3001’ is therefore not allowed access. 我只需要在Rails应用程序中设置CORS吗? 还有另一种方式 – 也许某种本地主机文件技巧(我在Mac,FWIW)或类似? 我问,因为我的同事负责Rails应用程序(我对Rails的经验有限)但是已经离开了一段时间; 我的知识主要限于我设置的AngularJS堆栈。 我已经搜索并阅读了大约一个小时,但还没有找到任何我能理解的适用于我的情况的东西。 我可能不知道最好的搜索字词。 谢谢你的帮助!

如何在引发exception时保留响应头?

我正在使用rack-cors在我们的API请求中添加CORS响应头。 当请求成功时它工作正常(200)。 但是当应用程序通过authenticate_user!引发exceptionActiveRecord::RecordNotFound (404)或设计 /无效凭据时authenticate_user! (401) – 它没有响应CORS响应头。 它不仅适用于机架式。 它不响应在引发exception之前添加的任何自定义标头。 最大的问题是在客户端(浏览器),因为它不是根据状态代码显示正确的错误,而是显示: XMLHttpRequest无法加载http://development.com:4000/orders/1 。 请求的资源上不存在“Access-Control-Allow-Origin”标头。 因此,不允许来源“ http://development.com:3000 ”访问。 如果我手动捕获exceptionrescue_from并render json: {}, status: 500它会响应标题。

Heroku Rails CORS问题

我已经构建了一个rails restful服务,我在Heroku和一个Angular客户端上托管,我试图从我的本地机器运行。 最终,此客户端将被添加到phonegap项目中。 但是,现在我正在使用chrome测试应用程序,即我的浏览器会继续返回下面的错误。 XMLHttpRequest cannot load Origin http://localhost is not allowed by Access-Control-Allow-Origin. 这是我得到的错误消息。 在推送到Heroku之前我遇到了这个问题,并通过在我的回复中添加访问标题来解决它。 after_filter :cors_set_access_control_headers # For all responses in this controller, return the CORS access control headers. 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’] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(‘,’) headers[‘Access-Control-Max-Age’] = “1728000” end 这似乎不起作用。 出于某种原因,这不适用于Heroku。 […]

Rails,Backbone,PhoneGap,CORS(Access-Control-Allow-Origin错误不允许)

我正在构建一个使用backbone.js和Rails后端的Phonegap应用程序。 在创建新用户时,我收到了与CORS相关的错误: 我在http://0.0.0.0:8000 python -m SimpleHTTPServer)上运行我的PhoneGap网络应用程序,并在webrick上运行我的Rails应用程序在http://0.0.0.0:3000 rails服务器)。 尝试在Backbone中创建一个新的“Spot”时会出现问题(chrome js控制台): > s = new App.Models.Spot() (creates Spot) > s.save() (returns error Object) OPTIONS http://0.0.0.0:3000/spots.json 404 (Not Found) jquery-1.8.2.js:8416 XMLHttpRequest cannot load http://0.0.0.0:3000/spots.json. Origin http://0.0.0.0:8000 is not allowed by Access-Control-Allow-Origin. 这是我的应用程序控制器: def set_access_control_headers headers[‘Access-Control-Allow-Origin’] = ‘http://0.0.0.0:8000’ headers[‘Access-Control-Request-Method’] = ‘POST, GET’ end 我已经阅读了很多文章,我可以得到的最远的是修改我的routes.rb以包含这个: match ‘*all’ => ‘application#cor’, :constraints […]

Access-Control-Allow-Origin不允许使用Rails 3和Angularjs Origin http:// localhost。

首先,我要说我已尝试过大量已在此处发布的解决方案。 它们似乎都不适合我。 我意识到我的问题源于CORS和我的rails应用程序无法正确处理。 但是,我不太清楚如何纠正这个问题。 我希望这里有人可以解释这个问题。 相关代码片段: Rails application_controler.rb class ApplicationController ”, :content_type => ‘text/plain’ end end def allow_cross_domain_access headers[‘Access-Control-Allow-Origin’] = ‘*’# http://localhost:9000 headers[‘Access-Control-Allow-Headers’] = ‘GET, POST, PUT, DELETE, OPTIONS’ headers[‘Access-Control-Allow-Methods’] = %w{Origin Accept Content-Type X-Requested-With X-CSRF-Token}.join(‘,’) headers[‘Access-Control-Max-Age’] = ‘1728000’ end end Angular App.js ]).config(function($httpProvider){ delete $httpProvider.defaults.headers.common[‘X-Requested-With’]; }); function loginCtrl ($scope,$http) { $scope.master = {}; $scope.isUnchanged […]