ruby-on-rails - 如何配置 Fine Uploader 以发出与 Rails 兼容的请求?

标签 ruby-on-rails ruby ajax ruby-on-rails-3 fine-uploader

使用 Fine Uploader使用 Rails 3.2,我不知道如何配置 Fine Uploader 来发出 Rails 后端可以授权的上传请求。

Fine Uploader 前端元素工作正常并以我的资源 (uploads) 为目标,但是因为 uploads#create 端点受授权保护(用户必须登录in) 请求必须包含有效的 session 信息才能通过。而它并没有,所以上传当然失败了。

如何让 Fine Uploader 发出包含必要信息的请求,以便 Rails 将其接受为用户 session 的一部分?

为了它的值(value),我像这样初始化 uploader :

app/views/uploads/index.html.haml

[ ...template... ]

:javascript
    var uploader = new qq.FineUploader({
        debug:true,
        element: document.getElementById("uploader"),
        request: {
            endpoint: '/uploads',
        }
    })

它发出一个 POST/upload 请求,该请求被路由到 upload#create,但由于在 Controller 中进行如下检查而导致授权失败:

def session_exists?
    return true if !session[:user_id].blank?`

任何见解表示赞赏。

最佳答案

这里的关键是了解 Rails 的 authenticity token 及其在 CSRF(跨站点请求伪造)保护中的作用。从 Fine Uploader 发出的 AJAX 请求必须包含正确的 token ,以便 Rails 接受它作为来自站点的合法请求。

为此,您必须首先在呈现的 HTML 中的某处包含 token 。

例如在 HAML 模板中使用它:

%div#uploader{data: {authenticity: {token: form_authenticity_token}}}
:javascript
    var uploader = new qq.FineUploader({
        debug:true,
        element: document.getElementById("uploader"),
        request: {
            endpoint: '/uploads',
            params: {authenticity_token: $('#uploader').data('authenticity-token')}
        }
    })

这会在 HTML 的 #uploader 元素中生成 token ,并配置 Fine Uploader 在使用 JQuery 数据访问器发出请求时传回该值。

这可能都是基本的东西,但我是 Rails 的新手,所以这让我困惑了一段时间。 SO 问题“Fine Uploader with Rails form”触及了这一点,但在我拼凑出更大的上下文之前,我无法理解它的答案。

关于ruby-on-rails - 如何配置 Fine Uploader 以发出与 Rails 兼容的请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40308810/

相关文章:

ruby-on-rails - Heroku 模板错误 - 在错误的目录中寻找部分

ruby-on-rails - Rails - 上周按天分组

ruby - 为什么 Ruby 的默认参数值没有分配给 nil 参数?

javascript - 使用 jQuery load() 函数获取元素的祖 parent

javascript - 如何压缩 ajax 请求的响应?

ruby-on-rails - 如何暂时使我的登台 rails 服务器显示错误?

javascript - 从所选选项的模型中获取属性

ruby-on-rails - 从 Controller 动态更改 View -带有Rails中的线程的进度栏

ruby-on-rails - 与 Capybara (Rails) 的 TDD; page.should 和 expect(page).to 之间的区别?

javascript - 等待完成一系列 Ajax 请求