【发布时间】:2017-12-27 08:18:44
【问题描述】:
我有一个 Angular 2 应用程序,它应该向 Node Express 后端进行身份验证,它向后端发送登录请求并接收 cookie。它应该在每个连续的请求中发送这个 cookie(它不会)。
我的 Angular 应用中有:
类 LoginService
private requestOptions = new RequestOptions({headers: this.headers, withCredentials: true});`
login(username: string, password: string): Promise<boolean> {
return this.http.post(this.myUrl + "login",
JSON.stringify({username:username, password: password}), this.requestOptions)
.toPromise()
.then(res => true)
.catch(this.handleError);
}
一些数据服务
private requestOptions = new RequestOptions({headers: this.headers, withCredentials: true})
getData(): Promise<any> {
return this.http.get(this.myUrl, this.requestOptions)
.toPromise()
.then (res => res.json())
.catch(this.handleError)
}
在我的节点后端,我有:
response.header('Access-Control-Allow-Methods', 'GET, PUT, POST, DELETE, OPTIONS');
response.header("Access-Control-Allow-Origin", http://localhost:4200);
response.header('Access-Control-Allow-Credentials', true);
response.header('Access-Control-Allow-Headers', 'Origin, Content-Type, Accept');
当我以角度发送登录请求时,我可以看到它在服务器端被接受,但是当我发送连续请求时,它给了我 401 未授权,如果您未通过身份验证,这是我发送的错误。
但是,当我通过 HttpRequester(用于 HTTP 请求的 Firefox 插件)发送登录请求时,我可以访问我的 Angular 应用程序中的所有数据。
我的角度版本是 2.4.10
+++更新+++
所以,我做了一些测试,发现只要我使用相同的服务,我的身份验证就可以正常工作。
我有一个名为 login.service.ts 的服务和一个名为 data.service.ts 的服务。
我能做什么: 通过 login.service.ts 登录并通过 login.service.ts 获取数据。
我不能做什么: 通过 login.service.ts 登录并继续使用 data.service.ts。
这对我的用例来说不是很实用。 有人对此有什么想法吗?
【问题讨论】:
标签: angular authentication cookies cross-domain