【问题标题】:Angular don't set token in Request HeaderAngular 不在请求标头中设置令牌
【发布时间】:2018-10-13 05:32:28
【问题描述】:

问题是angular没有向api发送令牌,授权:令牌没有出现在Resquest Header中(Nodejs中的api)

Network Error Image

这是发出 http 请求的组件(使用标头获取)

ngOnInit() {
    this.getPets('/api/animals/all');
  }

  getPets(URL) {
    const userToken = localStorage.getItem('token');
    const headers = new HttpHeaders().set('Authorization', userToken);
    console.log(headers);
      this.httpClient.get(api_url + URL, { headers } ).subscribe(pets => {
      this.data = pets;
      this.petsHome = this.data.pets;
      console.log(this.petsHome);
    });
  }

这里是定义 CORS 的 api.ts

class Api {

  public express: Application;

  constructor() {
    this.express = express();
    this.middleware();
  }

  middleware(): void {
    this.express.use(function (req, res, next) {
      res.setHeader('Access-Control-Allow-Origin', '*');
      res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
      res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
      next();
    });
    this.express.use(morgan('dev'));
    this.express.use(bodyParser.urlencoded( { extended: true } ));
    this.express.use(bodyParser.json());
    this.express.use(Handlers.errorHandlerApi);
    this.router(this.express, Auth);
  }

  private router(app: Application, auth: any): void {
    Routes.initRoutes(app, auth);
  }
}

导出默认new Api().express;

请求不需要令牌,正常发生并响应 200 OK。例如通常不需要令牌的登录(没有标题)

Console.log of Headers

【问题讨论】:

  • 能否粘贴console.log(headers)的结果; (角度)
  • 我添加了图片

标签: node.js angular api http-headers httprequest


【解决方案1】:

试试这个:

res.addHeader("Access-Control-Allow-Headers", "Authorization")

我不确定 API 是否被称为 addHeader,但你应该明白我的意思。

【讨论】:

  • Nodejs 中不存在 addHeader,所以我使用 res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With, content-type, Authorization');但这不起作用
  • 我在nodejs上使用koa2-cors,你也可以找到一个在Express上工作的库
  • 我尝试使用 koa2-cors,但这对我来说返回 502
【解决方案2】:

我不确定.set 是否有效,另一种方法是在这样的标题中使用.append,请尝试以下代码-

const headers: HttpHeaders = new HttpHeaders()
headers.append('Authorization', userToken); 

【讨论】:

  • 我已经尝试了.append,但是不行,结果和.set一样
【解决方案3】:

我的 api 在 OPTIONS 中等待令牌

所以...我添加了这段代码

if ('OPTIONS' === req.method) {
        res.send(200);
        return;
      }

这解决了我的问题

【讨论】:

    猜你喜欢
    • 2019-11-26
    • 2017-11-29
    • 2019-02-20
    • 1970-01-01
    • 2014-06-08
    • 2020-10-01
    • 2017-09-22
    • 2018-06-29
    • 1970-01-01
    相关资源
    最近更新 更多