【问题标题】:Add "Bearer-Token" to the http headers in angular以角度将“Bearer-Token”添加到http标头
【发布时间】:2020-11-04 08:08:13
【问题描述】:

我正在尝试在 http 标头中添加自定义字段“Bearer-Token”。 将令牌添加为 'Authorization' : Bearer xyzqwerty 工作正常,但添加 'Bearer-Token': xyzqwerty 会引发错误

TypeError: Cannot read property 'length' of null
    at HttpHeaders.applyUpdate (http.js:334)
    at http.js:284
    at Array.forEach (<anonymous>)
    at HttpHeaders.init (http.js:280)
    at HttpHeaders.forEach (http.js:378)
    at Observable._subscribe (http.js:2362)
    at Observable._trySubscribe (Observable.js:42)
    at Observable.subscribe (Observable.js:28)
    at subscribeToResult (subscribeToResult.js:9)
    at MergeMapSubscriber._innerSub (mergeMap.js:59)

下面是我正在使用的拦截器的代码:

import { Injectable, Injector } from '@angular/core';
import { HttpEvent, HttpInterceptor } from '@angular/common/http'
import { AuthService } from './auth.service';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class TokenInterceptorService implements HttpInterceptor {

  constructor(private injector: Injector) { }
  intercept(req, next): Observable<HttpEvent<any>>{

    let authService = this.injector.get(AuthService)
    let tokenizedReq = req.clone(
      {
        headers: req.headers.set('Authorization', 'bearer ' + authService.getToken()),
      }
      
    )

    let tokenizedReq1 = tokenizedReq.clone(
      {
        headers: tokenizedReq.headers.set('Bearer-Token', authService.getToken())
      }
    )
    return next.handle(tokenizedReq1)
  }
}

【问题讨论】:

  • 为什么要分两步做呢?根据 angular.io/guide/http#setting-default-headers 使用 setHeaders。
  • 这仍然不能解决我的问题。
  • 你确定 AuthService.getToken() 返回类型和执行吗?
  • 是的。如果我从代码中删除 Bearer-Token,它就会开始正常工作。

标签: javascript angular typescript http-headers


【解决方案1】:

你可以这样做:

const tokenizedReq1 = req.clone({setHeaders: {'Bearer-Token': authService.getToken()}});
return next.handle(tokenizedReq1);

如果这不起作用,您可以尝试这种方式:

    const tokenizedReq1 = req.clone({
        headers: new HttpHeaders({
          'Bearer-Token':  authService.getToken(),
          'Authorization': `bearer ${authService.getToken()}`
        })
    });

【讨论】:

  • 我只能建议您检查 authService.getToken() 返回字符串并且它不是异步函数,在任何其他情况下,标头都不会正确设置。
  • getToken(){ return localStorage.getItem('token') } 这里是getToken的代码,它返回存储在本地存储中的token,所以是字符串。
  • 我已经编辑了评论,换一种方式试试。如果这不起作用,我恐怕没有 Stackbliz 或任何其他 sn-p 就无法帮助你。
  • 您好 Milan,感谢您的帮助,但我让后端开发人员接受了“授权”;承载qwrtyuuio。所以问题有点解决了。现在不需要发送它..
  • 没问题@IshankJain,我很高兴你最终解决了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-03
  • 2019-11-08
  • 2012-08-14
  • 2017-10-15
  • 2012-01-04
相关资源
最近更新 更多