【问题标题】:How to send data (Angular 2)?如何发送数据(Angular 2)?
【发布时间】:2016-04-20 01:55:17
【问题描述】:

我正在尝试使用 Angular 2 通过 http 请求发送凭据,但 Angular 2 Http get 请求不发送凭据。 我做错了什么?

var creds = "username=" + this.username + "&password=" + this.password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

http.get('http://localhost:3000', {
    headers: headers,
    credentials: creds
})
.map(res => res.json())
.subscribe(
    data => this.data(data),
    err => this.error(err),
    () => console.log('Done')
);

【问题讨论】:

标签: angular typescript xmlhttprequest httprequest


【解决方案1】:

我认为您想使用 HTTP 基本身份验证来访问安全的 HTTP 资源。因此,您的凭据需要在 Authorization 标头中设置,如下所述:

createAuthorizationHeader(headers:Headers) {
  headers.append('Authorization', 'Basic ' +
    btoa('username:password')); 
}

getData() {
  var headers = new Headers();
  this.createAuthorizationHeader(headers);

  this.http.get('http://localhost:3000'', {
    headers: headers
  }).map(res => res.json())
    .subscribe(
      data => this.data(data),
      err => this.error(err),
      () => console.log('Done')
}

您会注意到您的凭据必须是 base64 编码的。

您的请求似乎是跨域请求,因此适用 CORS 概念。您可以查看此链接了解更多详情:http://restlet.com/blog/2015/12/15/understanding-and-using-cors/。也就是说,我认为您的问题与 CORS 无关。

我在RequestOptions 类中看不到任何credentials 属性。

希望对你有帮助 蒂埃里

【讨论】:

    【解决方案2】:

    试试这个代码,它一定可以工作:

    var creds = "username=" + this.username + "&password=" + this.password;
    var headers = new Headers();
    headers.append('Content-Type', 'application/x-www-form-urlencoded');
    
    http.get('http://localhost:3000' + creds, {
     headers: headers,
     })
     .map(res => res.json())
     .subscribe(
     data => this.data(data),
     err => this.error(err),
     () => console.log('Done')

    【讨论】:

      【解决方案3】:

      在您的应用配置中尝试:

        $httpProvider.defaults.withCredentials = true;
      

      所以您的应用配置将如下所示:

      angular.module('myappService', [
          'fdvService.constants',
      ]).config(['$httpProvider',function ($httpProvider) {
            $httpProvider.defaults.withCredentials = true;
        }]);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-30
        • 2017-04-23
        • 2015-12-30
        • 2017-10-19
        • 1970-01-01
        相关资源
        最近更新 更多