Проблема с угловым методом HttpClient.get

Я использую passport-jwt для защиты маршрутов в своем домашнем питомце MEAN Stack. Серверная сторона работает хорошо, сервер получает правильный jwt в заголовках и корректно отвечает на запросы почтальона и запросы от моего углового приложения, в то время как я использую полный URL в запросе get.

import { HttpClient, HttpHeaders } from '@angular/common/http';
...
constructor(private http: HttpClient) {}
...
getProfile() {
  this.loadToken();
  let requestHeaders = new HttpHeaders()
    .set('Content-Type', 'text')
    .append('Authorization', this.authToken);
  return this.http.get('http://localhost:8080/users/profile', {headers: requestHeaders})
}

Но когда я удаляю свой домен localhost из URL-адреса запроса, чтобы подготовить приложение к хостингу, я начинаю получать

ошибка 401 Несанкционированный

return this.http.get('users/profile', {headers: requestHeaders})

Я вошел в консоль заголовков из запроса и заметил, что они совершенно разные

заголовки первого (полного URL) запроса,заголовки второго запроса

В первом запросе (который работает нормально) у меня есть JWT в [[Entries]] массив, но во втором запросе он находится в lazyUpdate массив и сервер не могут его найти. Почему заголовки меняются так резко только при удалении localhost из url? Как исправить это заголовки?

PS моя паспортная конфигурация

1 ответ

Похоже, проблема возникает из вашего passport.js

ты использовал

ExtractJwt.fromAuthHeaderWithScheme('JWT') // this method no longer supports by the newer versions of the passport js 

так что для вашей паспортной реализации js попробуйте это. также обратите внимание, что здесь приведена проверка объектаjwt_payload._id с вашей реализацией, потому что в официальной документации паспорта js их реализация не может дать вам этот идентификатор данных сеанса.

User.getUserById (jwt_payload._id, (err, user) => {} // в этом коде отметьте вышеупомянутый

Что касается второго шага, попробуйте это,

var opts = {};
    opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
    opts.secretOrKey = config.secret;
    // opts.issuer = config.issuer;
    // opts.audience = config.audience;
    passport.use(new JwtStrategy(opts,function(jwtPayload,done){   
        User.getUserById(jwtPayload.id,function(err,profile){
            if(err){
                return done(err,false);
            }
            if(profile){
                return done(null,profile);
            }else{
                return done(null,false);
            }
        });
    }));
Другие вопросы по тегам