Сервер Express не может получить заголовки аутентификации, отправленные угловым HttpClient - PullRequest
0 голосов
/ 04 июня 2019

Я создаю приложение, в котором пользователь может войти и посмотреть свой профиль.Для этого у меня есть enpdpoint на сервере:

router.get('/profile',
passport.authenticate('jwt', {session:false}),
async(req, res) => {
    console.log(req.headers)
    try {
        let users = await usersDB.getAll();
        res.json({
            users: users,
            user: req.user
        });
    } catch (err) {
        console.log(err);

    }   
});

Здесь строка passport.authenticate('jwt', {session:false}) должна аутентифицировать пользователя, если в заголовке есть токен авторизации.Но насколько я пытаюсь регистрировать заголовки - у них нет такого поля.поэтому при вводе кнопки входа я делаю следующее:

 public onLoginSubmit(): void {
    const user = {
      email : this.email,
      password : this.password
    }
    this.authService.authenticateUser(user).subscribe((data: any)=>{
      if(data.success){//here need to check response for success
        this.authService.storeUserData(data);
        this.router.navigate(['/user']);
      }else{
        this.router.navigate(['/login']);
      }
    });
 }

, затем просматриваю getProfile ():

    getProfile(){
      let headers = new HttpHeaders();
      this.loadToken();
      headers.set('Content-Type', 'application/x-www-form-urlencoded').set('Authorization', this.authToken);
      return this.http.get(`${this.url}profile/`, {headers:headers})
      .pipe(map(res => res))
    }

Хорошо, при отправке запроса я получаю 401 Unauthorized Нос почтальоном все работает довольно хорошо.Вот код от почтальона:

GET /profile HTTP/1.1
Host: localhost:3000
: 
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjVjZjU4NThiODhiZGRmM2M5ODYxYjU2ZCIsImZpbyI6IlRlbGVmdXMgSWxsaWEgQW5hdG9saXlvdmljaCIsInBhc3N3b3JkIjoiN2IzNGMxNzFmZmM2MWE2ZDYyZDljZTM5NDg0ZjM1NjNjMDY3Y2Q3ZTlhMDQ5ZjZkY2RjN2U5NzI2NWJjNTAwMWE2NjE5OTkxZjFjN2U3MTVjZjZkMDUzZThhZDNlMmQyZWIxNzQ1ZDI4NmRkMWJlOTVkNTdjNjg5MzA3OTI1YjMiLCJlbWFpbCI6ImlseWEuaXQzMzdAZ21haWwuY29tIiwiYXZhdGFyIjoiaHR0cHM6Ly9iaXQubHkvMklrMkc3ViIsImJpcnRoIjoiMTk3MC0wMS0xMVQwMDoyMjo1MC4wMDFaIiwibGljTnVtYmVyIjoiQUEyMzQyNTQyNjMiLCJzdGF0dXMiOiJ1c2VyIiwiX192IjowLCJhcHBsaWNhdGlvbnMiOltdLCJwZW5kaW5nIjp0cnVlfSwiaWF0IjoxNTU5NjQyNjI0LCJleHAiOjE1NjAyNDc0MjR9.iDt1lE5CziA05Wd2s1y536S0LyahGCRmwe6WsgYytzQ
cache-control: no-cache
Postman-Token: 5c4e2375-d8d0-43a0-87f8-25cd9a85c92f

1 Ответ

1 голос
/ 04 июня 2019

HttpHeaders являются неизменяемыми, поэтому просто попробуйте (я думаю, вам не нужно устанавливать application / x-www-form-urlencoded)

     getProfile(){
      let headers = new HttpHeaders({
'Authorization' : this.authToken
});
      this.loadToken();
      return this.http.get(`${this.url}profile/`, {headers:headers})
      .pipe(map(res => res))
    }

Если ваша аутентификация - Bearer, вам потребуется «Авторизация»: «Bearer'+' this.authToken '

...