Rails - 不检查 CSRF 令牌的控制器

Posted

技术标签:

【中文标题】Rails - 不检查 CSRF 令牌的控制器【英文标题】:Rails - Controller that does not check for CSRF token 【发布时间】:2015-10-27 06:05:16 【问题描述】:

在我的 rails 应用程序中,其中一个控制器显示了我希望托管在不同域上的网站从中提取数据的公共统计信息。 (app.donornest.com/stats.json)

我的控制器代码如下:

class StatsController < ApplicationController 
require 'ostruct'
skip_before_action :verify_authenticity_token
respond_to :html, :xml, :json, :csv

def index
    @stats = OpenStruct.new
    @stats.users = User.all.count
    @stats.organizations = Organization.all.count
    @stats.donors = Person.all.count
    respond_to do |format|
        format.json render json: @stats
    end
end
end

我认为 skip_before_action :verify_authenticity_token 行就足够了,但是当我尝试从控制台向该页面发出请求时,我收到以下错误:

XMLHttpRequest cannot load http://app.donornest.com/stats.json. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8080' is therefore not allowed access.

我该如何解决这个问题?

【问题讨论】:

【参考方案1】:

这看起来不像是真实性令牌错误。

看起来像是跨域访问控制错误。检查此答案以在 Rails 中为启用 CORS 的客户端启用访问控制标头:

Allow anything through CORS Policy

【讨论】:

以上是关于Rails - 不检查 CSRF 令牌的控制器的主要内容,如果未能解决你的问题,请参考以下文章

在rails 3中关闭CSRF令牌

Rails,设计认证,CSRF 问题

Angular 路由中的 Rails CSRF 令牌问题

Rails 3.2 - 为控制器操作禁用 CSRF 保护

Rails用户登录错误:无法验证CSRF令牌的真实性

基本 .ajax 发布到 rails 3.2.2 脚手架,生成“警告:无法验证 CSRF 令牌真实性”