backbone.js失败了,基本的auth rest api

时间:2014-02-04 01:59:31

标签: rest backbone.js basic-authentication

我是backbone.js的新手。我用php构建了一个rest api,我想用backbone.js连接到它。我正在通过我的其他api用于身份验证的http基本身份验证时遇到了困难。

我可以使用命令行中的curl轻松访问我的rest api,如下所示

curl -u username:password -X GET http://api.mysite.com/user

但是当我尝试进行提取时(这几乎就是我想要做的)我从我的其他api得到一个响应,认证失败。

这是来自backbone.js的电话

user.fetch({headers:{'Authorization':'Basic username:password'}});

使用backbone.js我会收到基本身份验证失败时的预期响应。我的问题是,因为我知道我的休息api与curl进行身份验证,为什么不通过上面的javascript进行身份验证呢?

另外,当我查看js控制台中发送的标题时,我看不到任何有关授权的信息。

更新

我尝试了下面评论中列出的插件,但得到了相同的结果

这是我的代码

var User=Backbone.Model.extend({
    url: 'http://api.mysite.com/user'
}); 
var user=new User();

user.credentials = {
    username: 'username',
    password: 'password'
};

user.fetch();

2 个答案:

答案 0 :(得分:3)

用户名和密码在发送之前需要使用Baes64进行编码。

执行此操作的一种简单方法(至少用于测试)是配置所有jQuery ajax请求以发送信息(Backbone使用jQuery进行ajax调用):

$.ajaxSetup(
  beforeSend: function(xhr){
    xhr.setRequestHeader("Authorization", "Basic " + btoa("USERNAME" + ":" + "PASSWORD"));
  }
);

请注意,btoa是使用Base64对params进行编码的函数。现在你可以调用user.fetch()并且它应该正常工作:你不需要提供凭据,因为我们已经配置了jQuery来为我们发送它们(所有时间)。

当然,根据您的情况(例如,使用多个API),您可能更愿意在每个请求中指定beforeSend属性,或者在Backbone sync函数中定义它。

答案 1 :(得分:0)

我在允许的标题列表中添加了“授权”,这就行了。

header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept");