【问题标题】:Angular 6 adding custom headerAngular 6添加自定义标题
【发布时间】:2018-09-18 22:55:02
【问题描述】:

您好我正在尝试通过 http 拦截器添加自定义标头,以下是我的代码

import { Injectable } from '@angular/core';
import {
    HttpEvent, HttpInterceptor, HttpHandler, HttpRequest
} from '@angular/common/http';

import { Observable } from 'rxjs';
import { StorageService } from 'src/app/services/storage-service';
import { HttpHeaders } from '@angular/common/http';

@Injectable()
export class AuthorizationHeaderInterceptor implements HttpInterceptor {
constructor(private storageService:StorageService ){}

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    let authToken = this.storageService.getAuthorizationToken();        
    const authReq = req.clone({
        headers: req.headers.set('Authorization', authToken)
    });

    return next.handle(authReq);
    }
}

使用上面的代码我得到'TypeError:无法读取未定义的属性'长度'。但是,随着以下更改,错误消失了,但它没有设置授权标头。

const authReq = req.clone();
authReq.headers.set('authorization',authToken);  

代码中可能有什么问题。

提前致谢。

【问题讨论】:

    标签: angular angular5 angular6


    【解决方案1】:

    我个人使用 setHeaders 而不是标题

      //here you add the bearer in every request
      addAuthentication(req: HttpRequest<any>): HttpRequest<any> {
        const headers: any = {};
        const authToken = this.userStore.getToken(); // get the token from a service
        if (authToken) {
          headers['authorization'] = authToken; // add it to the header
          req = req.clone({
            setHeaders: headers
          });
        }
        return req;
      }
    

    【讨论】:

    • 谢谢@xrobert35,我忘了在我的代码中添加 if(authToken) 条件,这在未定义 authToken 时导致了问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2017-10-29
    • 2021-09-10
    • 1970-01-01
    相关资源
    最近更新 更多