Заголовки Angular 7 не устанавливаются

Я использую Angular 7 и создал перехватчик для включения токена аутентификации в каждый запрос.

Вот мой код перехватчика:

import { Observable } from 'rxjs';

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

@Injectable()
export class JwtInterceptor implements HttpInterceptor {
  constructor() { }

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const token = localStorage.getItem('authToken');
    if (token) {
      request = request.clone({
        setHeaders: {
          authorization: token
        }
      });
    }
    return next.handle(request);
  }
}

API узла для проверки токена авторизации:

const jwt = require('jsonwebtoken');

function verifyToken(req, res, next) {
    var token = req.headers['authorization']; // Coming Undefined 
    if (!token)
        return res.status(403).send({ auth: false, message: 'No token provided.' });
    jwt.verify(token, 'top_secret', function (err, decoded) {
        if (err)
            return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' });
        // if everything good, save to request for use in other routes
        req.userId = decoded.user.email;
        next();
    });
}

module.exports = verifyToken;

При обращении к API с помощью Postman все работает нормально, но при отправке запроса с использованием углового кода заголовки не принимаются в API узла.

Заголовок запроса при отправке из angular

Заголовок запроса при отправке почтальоном

Сведения о вкладке

Объект запроса отправлен из браузера Что может быть возможной причиной такого странного поведения?


person Arjun Singh    schedule 21.06.2019    source источник
comment
@lealceldeiro, да, я попробовал это и обнаружил, что это не настоящая ошибка. Отредактировал мой код.   -  person Arjun Singh    schedule 21.06.2019
comment
Javascript различает символы верхнего и нижнего регистра. Как упоминал lealcedeiro, вы устанавливаете заголовок Authorization, ожидая authorization. Однако вы также не получаете Authorization, так что проблема не в этом. Проверяли ли вы вкладку сети при отправке запроса, чтобы подтвердить, что заголовок вводится в запрос?   -  person Tim VN    schedule 21.06.2019
comment
@TimVN, да, я не получаю никаких значений ни авторизации, ни этой авторизации. Я обновил вопрос с информацией о вкладке сети.   -  person Arjun Singh    schedule 21.06.2019
comment
Вы пробовали request = request.clone({ setHeaders: { 'Authorization': token }, withCredentials: true });   -  person Tim VN    schedule 21.06.2019
comment
Ваш JwtInterceptor правильно называется?   -  person youri    schedule 21.06.2019
comment
@TimVN, да, и этот способ отправки заголовков тоже не работает.   -  person Arjun Singh    schedule 21.06.2019
comment
@youri, да, я добавил отладчик, и его попадание также зарегистрировало окончательный запрос в консоли. Отредактировал мой вопрос   -  person Arjun Singh    schedule 21.06.2019


Ответы (3)



У меня была аналогичная проблема с перехватчиком и клонированием запроса в сочетании с авторизацией.

Мне пришлось добавить тип контента и принять заголовки и сообщить серверу, что это json:

  setHeaders: {
    'Content-Type' : 'application/json; charset=utf-8',
    'Accept'       : 'application/json',
    'Authorization': '' // your token
  }
person lucamuh    schedule 21.06.2019
comment
Я пробовал таким образом, но результаты такие же. Заголовки не изменились по сравнению с тем, что я поделился в своем вопросе. - person Arjun Singh; 21.06.2019

Попробуй так сделать

request.clone({
      headers: request.headers.set(
        'Authorization',
        localStorage.getItem('token')
      )
    })
person Louis Amas    schedule 21.06.2019