AngularJS发送表单数据

时间:2015-11-28 18:44:43

标签: angularjs json authentication curl form-authentication

我正在尝试发送带有表单数据的POST请求。

.save(data)上使用$resource('http://localhost:5000/api/auth'); - 对象会发送以下相应的cURL字符串(使用Chrome提取): curl 'http://localhost:5000/api/auth' -H 'Pragma: no-cache' -H 'Origin: http://localhost:63342' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36' -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept: application/json, text/plain, */*' -H 'Cache-Control: no-cache' -H 'Referer: http://localhost:63342/public_html/app/index.html' -H 'Connection: keep-alive' -H 'X-FirePHP-Version: 0.0.6' --data-binary '{"username":"admin","password":"mypass"}' --compressed

我的API 获取任何表单数据。但是,当我使用curl -X POST --data "username=engel&password=mypass" http://localhost:5000/api/auth时,我的API会返回200 SUCCESS

如何使用$resource发布与工作相似的请求?

API允许回复Access-Control-Allow-Origin http://localhost:63342

修改 我使用以下工厂:

factory('AuthResource', ['$resource', function($resource) {
    return $resource('http://localhost:5000/api/auth');
}]);

然后我用

调用它
var login = AuthResource.save(user);

其中,用户是包含usernamepassword

的词典

1 个答案:

答案 0 :(得分:0)

您正在使用$resource服务发送标准POST请求。这意味着它会将usernamepassword作为JSON对象发送到请求正文中。

您执行的CURL请求将数据作为url编码的表单数据发送。这也是您期望的API。

如果您想以角度方式执行相同操作,则必须告知$resource也将其作为表单数据发送。

只需在$resource服务中添加新方法即可更新工厂:

factory('AuthResource', ['$resource', function($resource) {
    return $resource(
        'http://localhost:5000/api/auth', 
        {},
        {
           login: { 
              method: 'POST',
              headers: {
                  'Content-type': 'application/x-www-form-urlencoded'
              }
              tranformRequest: function (data, headersGetter) {
                  var str = [];
                  for (var d in data) {
                      str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
                  }
                  return str.join("&");
              }
           }
        }
    );
}]);

此自定义方法会发送正确的标头,但也会将带有凭据的JSON对象转换为url编码的字符串。

然后,您可以使用此新方法对您的api进行身份验证:

var login = AuthResource.login(user);