Проблема с угловым методом 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})
Я вошел в консоль заголовков из запроса и заметил, что они совершенно разные
,
В первом запросе (который работает нормально) у меня есть JWT в [[Entries]]
массив, но во втором запросе он находится в lazyUpdate
массив и сервер не могут его найти. Почему заголовки меняются так резко только при удалении localhost из url? Как исправить это заголовки?
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);
}
});
}));