0

Итак, я работаю над приложением angular2 и пытаюсь создать JWT после входа в систему, чтобы получить информацию профиля пользователя. Я могу успешно войти в систему, и именно тогда я создаю токен. После входа в систему я направляю пользователя на страницу профиля, и именно там я вызываю свой api, чтобы получить информацию о пользователе. Все это работает только после входа в систему и обновления до страницы.JWT в localStorage работает только после обновления страницы

this.auth_service 
     .Login(this.email, this.password) 
     .subscribe(
       data => { 
         this.global_events.change_nav_bar.emit(true) 
         console.log('logged in successfully: ' + data) 
         this.router.navigate(['/profile']) 
        }) 

// auth_service выше вызывает этот метод

Login(email, password): Observable<boolean> 
    { 
     return this.http 
        .post('/api/login', JSON.stringify({email: email, password: password}), this.Get_Headers('no_auth')) 
        .map(Handle_Response) 

     function Handle_Response(response: Response) 
     { 
      let token = response.json() && response.json().token 
      if(token) 
      { 
       this.token = token 
       localStorage.setItem('current_user', JSON.stringify({ email: email, token: token })) 
       return true 
      } 
      else 
       return false 
     } 
    } 

// Тогда в моем профиле компонента я это делаю. Я экспериментировал с разным временем ожидания.

ngOnInit(): void 
    { 
     this.global_events.change_nav_bar.emit(true) 

     setTimeout(() => this.Get_User_Data(), 10000) 
    } 
+0

кода выглядит хорошо, вы получаете какие-либо ошибки? токен хранится в локальном хранилище, вы его проверили? что делает функция get_User_data(), ищет локальное хранилище? –

+0

this.Get_User_Data() вызывает мой api/profile, который использует jwt для доступа к маршруту «router.get ('/ api/profile», auth, Get_User) ». Ошибка, которую я получаю, является несанкционированной ошибкой 401, когда я вызываю this.Get_User_Data(). Что вы подразумеваете под маркером, хранящимся в localStorage? Я имею в виду, что это должно быть, если оно работает на обновление правильно? –

+0

Ошибка 401 означает, что пользователь не авторизовался, пользователь разрешил, чтобы u не передавал токен аутентификации в этом запросе api. убедитесь, что u r получает токен в этом методе get_user_data(), и вы отправляете его с запросом. иначе вы не получите ошибку 401. –

ответ

0

Я решил это (на самом деле не решен, но нашел другое решение), просто потянув маркер непосредственно из LocalStorage вместо установки в AuthenticationService

Смежные вопросы