Angular - Set headers for every request

前端 未结 19 1827
[愿得一人]
[愿得一人] 2020-11-22 07:43

I need to set some Authorization headers after the user has logged in, for every subsequent request.


To set headers for a particular request,



        
19条回答
  •  [愿得一人]
    2020-11-22 08:14

    Better late than never... =)

    You may take the concept of extended BaseRequestOptions(from here https://angular.io/docs/ts/latest/guide/server-communication.html#!#override-default-request-options) and refresh the headers "on the fly" (not only in constructor). You may use getter/setter "headers" property override like this:

    import { Injectable } from '@angular/core';
    import { BaseRequestOptions, RequestOptions, Headers } from '@angular/http';
    
    @Injectable()
    export class DefaultRequestOptions extends BaseRequestOptions {
    
        private superHeaders: Headers;
    
        get headers() {
            // Set the default 'Content-Type' header
            this.superHeaders.set('Content-Type', 'application/json');
    
            const token = localStorage.getItem('authToken');
            if(token) {
                this.superHeaders.set('Authorization', `Bearer ${token}`);
            } else {
                this.superHeaders.delete('Authorization');
            }
            return this.superHeaders;
        }
    
        set headers(headers: Headers) {
            this.superHeaders = headers;
        }
    
        constructor() {
            super();
        }
    }
    
    export const requestOptionsProvider = { provide: RequestOptions, useClass: DefaultRequestOptions };
    

提交回复
热议问题