【问题标题】:Angular 4 not setting headers correctly or Express.js not looking in the right spot?Angular 4 没有正确设置标题或 Express.js 没有找到正确的位置?
【发布时间】:2018-03-22 00:32:44
【问题描述】:

我正在将我的请求标头中的身份验证令牌发送到 Express.js API,当我在邮递员中使用名为“授权”的标头发出请求时,它工作得很好,但是当我使用 angular 4 发送它时,如下所示:

const headers = new HttpHeaders()
  .set('Content-Type', 'application/json')
  .set('Authorization', `${token}`);
this.http.get<Response>(`${this.apiURL}dashboard/`, { headers: headers })
  .subscribe(res => console.log(res));

当记录时,标头对象看起来设置正确但是当我尝试在我的快速路由中检索令牌时:

const token = req.get('Authorization');

它总是未定义的。 Angular 与邮递员有何不同?

我尝试记录令牌时的结果:

邮递员工作:

【问题讨论】:

  • token前需要添加'Bearer'
  • @DinoMyte 我会试试的。
  • @DinoMyte 仍未定义。
  • 您需要添加 withCredentials: true 作为选项
  • 你看过标题案例吗? RFC 说它不区分大小写,但有些库会处理 Authorization != 授权。我知道 Angular 的早期 beta 版本对此存在问题。试试 const token = req.get('authorization');

标签: javascript angular typescript express http-headers


【解决方案1】:

HttpHeaders 对象是不可变的。查看https://angular.io/api/common/http/HttpHeaders 尝试设置这样的标题

let headers = new HttpHeaders();
headers = headers.set('Authorization', 'token');

【讨论】:

  • 我不会重新分配标头,如果我这样做的话它会中断,因为它也是一个它没有做的 const,我也尝试过这种方式,但它没有解决任何问题。跨度>
【解决方案2】:

尝试像这样设置标题
对于 Angular 版本

        import { Http, Headers, RequestOptions } from "@angular/http";

        // inside your Class
        headers = new Headers({
                "Content-Type": "application/json",
                "Accept": "q=0.8;application/json;q=0.9",
                "Authorization": "token"
        });
        options = new RequestOptions({ headers: this.headers });

并将 this.options 与您的 http 请求一起传递。

对于 Angular 版本 5

import { HttpClient } from '@angular/common/http';
import { HttpHeaders } from '@angular/common/http';

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/json',
    'Authorization': 'my-auth-token'
  })
};

并将 httpOptions 与您的 http 请求一起传递。

【讨论】:

  • 没有变化,我开始认为它们设置正确,我只是缺少其他东西。
  • router.get('/', (req, res, next) => { const token = req.get('Authorization'); console.log(token); // undefined 除非我使用邮递员}
  • 您能告诉我您使用的是哪个 Angular 版本吗?
  • 我正在使用 Angular 5.2
  • 试试我的答案的 Angular 5 版本。
【解决方案3】:

所以我找到了答案,这与 express.js 文档告诉我要使用相反:req.get('Authorization') 我发现如果我使用 req.headers['Authorization'] 它可以完美地工作

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-14
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多