Проблема с угловым методом HttpClient.get - PullRequest
0 голосов
/ 08 января 2019

Я использую 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})

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

headers of first (full url) request, headers of second request

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

P.S. Конфигурация моего паспорта

1 Ответ

0 голосов
/ 09 января 2019

похоже, что проблема возникает из вашего 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);
            }
        });
    }));
...