web-dev-qa-db-ja.com

Angular 4 HttpClientモジュールでヘッダーを設定する

Angularの新しいimで、何らかの理由でサーバー側認証のヘッダーを設定する必要があるプロジェクトに取り組んでいます。Angular 4と '@ angular/common /からインポートされたHttpClientモジュールhttp '

これは私のAuthServiceクラスです

import { Injectable } from '@angular/core';
import { User } from '../../models/user';
import { HttpClient, HttpHeaders, HttpRequest } from 
'@angular/common/http';
import { Observable } from 'rxjs';
import { Globals } from '../../utils/global';
import { Converters } from '../../utils/converters';


@Injectable()
export class AuthService {
getUserByToken(token: string): any {
    let headers = new HttpHeaders();
    headers.append('Content-Type', 'application/json');
    headers.append('authorization', 'Bearer ' + token);

    console.log(headers);

    return new Promise((resolve, reject) => {
      this.http.get(this.global.urls['info'], { headers: headers }).subscribe((data) => {
        if (data != null) {
          this.converter.userJsonToObject(data).then((data: User) => {
            this.setCurrentUser(data);
            this.persistToken(data.token);
            resolve(data);
          });
        } else {
          reject('This user is not defined');
        }
      }, (err) => {
        reject(err);
      });
    });

  }

ARC

プロジェクトを実行してgetUserByToken(token)関数を呼び出すと、サーバーコンソールからトークンが送信されなかったことが通知されました。エンドポイントはARCと完全に機能しているため、問題はクライアント側にあります。誰もがこの問題の解決に私を助けることができますか? :D

8

タイプはimmutable Mapしたがって、新しい値を割り当てると、オブジェクトが再初期化されるため、次のように実行する必要があります。

let headers = new HttpHeaders().set('Content-Type', 'application/json')
                               .set('authorization', 'Bearer ' + token);

または

let headers = new HttpHeaders().set('Content-Type', 'application/json');
headers = headers.set('authorization', 'Bearer ' + token);
17
Aravind