如何配置Fine Uploader以生成与Rails兼容的请求?

时间:2016-10-28 15:53:34

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

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

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

如何让Fine Uploader发出包含Rails必要信息的请求,以便在用户会话中接受此信息?

对于它的价值,我会像这样初始化上传者:

应用/视图/上传/ index.html.haml

[ ...template... ]

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

它发出一个POST /upload请求,路由到upload#create,但由于控制器中的检查而导致授权失败,如下所示:

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

任何见解都表示赞赏。

1 个答案:

答案 0 :(得分:3)

这里关键的一点是要了解Rails' authenticity token及其在CSRF(跨站请求伪造)保护中的作用。从Fine Uploader发出的AJAX请求必须包含正确的Rails令牌才能将其作为来自该站点的合法请求接受。

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

E.g。在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元素中,并配置Fine Uploader在使用JQuery数据访问器发出请求时将该值传回。

这可能是基本的东西,但我是Rails的新手,所以这让我对一个咒语感到困惑。 SO问题" Fine Uploader with Rails form"触及这一点,但直到我把更大的背景拼凑在一起之后,我才能理解它的答案。