将自定义HTTP标头传递给RESTful请求

Sja*_*sma 5 php rest yii backbone.js

我试图在Yii中集成Backbone,因此我需要REST.所以我安装了一个yii扩展,restfullyii,它使用了需要传递给请求的用户名和密码.问题是我不知道如何使用Backbone这样做.

想要的请求示例:

List
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/    
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/limit/1
curl -i -H "Accept: application/json" -H "X_REST_USERNAME: admin@restuser" -H "X_REST_PASSWORD: admin@Access" http://yii-tester.local/api/sample/limit/10/5 (limit/offeset)
Run Code Online (Sandbox Code Playgroud)

当前的错误响应,完全有意义..:

{
    "success": false,
    "message": "You are not authorized to proform this action.",
    "data": {"errorCode":500}
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何在整个Backbone中发送这样的值?

nik*_*shr 2

Backbone 将其 XHR 请求委托给 jQuery/Zepto,这就是您必须修改的内容。

$.ajaxSetup最简单的解决方案可能是通过标题选项提供默认选项

标头(1.5 添加)
默认值:{}

与请求一起发送的附加标头键/值对的映射。该设置是在调用beforeSend函数之前设置的;因此, headers 设置中的任何值都可以在 beforeSend 函数中被覆盖。

你可以这样设置:

$.ajaxSetup({
    headers:{
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    }
});
Run Code Online (Sandbox Code Playgroud)

发送的每个请求都将具有自定义标头。请参阅http://jsfiddle.net/nikoshr/j5Rr4/

或者您可以向每个请求传递附加选项,Backbone 会将它们转发给 jQuery:

var m = new Backbone.Model();   
m.fetch({
    headers:{
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    }
});
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/nikoshr/j5Rr4/2/

最后,您可以覆盖 Backbone.sync 为每个请求添加标头:

Backbone.realsync = Backbone.sync;
Backbone.sync = function(method, model, options) {
    options || (options = {});
    options.headers = {
        X_REST_USERNAME: "admin@restuser",
        X_REST_PASSWORD: "admin@Access"
    };

    return Backbone.realsync.call(model, method, model, options);
};

var m = new Backbone.Model();
m.fetch();
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/nikoshr/j5Rr4/4/