我正在尝试使用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')
);
答案 0 :(得分:2)
我认为您希望使用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
属性。
希望它可以帮到你, 亨利
答案 1 :(得分:1)
试试这段代码,它必须有效:
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')

答案 2 :(得分:0)
尝试:
$httpProvider.defaults.withCredentials = true;
所以你的app配置看起来像这样:
angular.module('myappService', [
'fdvService.constants',
]).config(['$httpProvider',function ($httpProvider) {
$httpProvider.defaults.withCredentials = true;
}]);