我工作的一个应用程序,其中服务器和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
此方法被用作before_filter
在ApplicationController
。
对于一些资源,用户必须进行身份验证和授权。 请求是通过XHR /阿贾克斯完成。 因此,如果用户没有通过验证设计将发送401响应给客户端,而不是重定向到网页的标志。 但设置CORS头过滤器不用于该响应。 因此,该401响应不发送给客户端。 我想赶上并使用在客户端的401响应。
目前我使用不使用的设计验证方法解决方法,但是自定义AUTH片段:
def authenticate_cors_user
if request.xhr? && !user_signed_in?
error = { :error => "You must be logged in." }
render params[:format].to_sym => error, :status => 401
end
end
这被设置为before_filter
在ApplicationController
,太。 这样的过滤器设置CORS头被触发,一切工作正常。
我宁愿用设计的默认行为,但CORS标头必须在401响应进行设置。 这该怎么做? 我一定要配置监狱长是什么?
如何可以在CORS头由设计产生的,而不是创造我自己的响应401响应设置?