Как получить доступ к веб-токену после входа в систему - PullRequest
0 голосов
/ 10 апреля 2019

Я создаю аутентификацию для входа в приложение, используя JWT. Мой метод входа возвращает токен, сгенерированный моим серверным приложением. После этого токен устанавливается в локальное хранилище. Я хочу добавить токен в заголовок, поэтому для этого я создал службу токена-перехватчика. Однако при написании токена на предъявителя я замечаю, что он нулевой. Я пытаюсь получить доступ к токену ПОСЛЕ того, как логин и настройка токена в локальном хранилище завершены.

Я прочитал несколько вопросов, похожих на мои, но, похоже, не могу понять. Я пытался использовать обещания, тайм-ауты (что я не считаю лучшим решением). Я попытался использовать операторы if, чтобы увидеть, вошел ли пользователь в систему, но это работает только при второй попытке входа, а не при первой. Я знаю, что метод входа в систему запускается перед методом перехвата, и поэтому он равен нулю, поэтому я пытался использовать наблюдаемое, чтобы дождаться, пока токен не будет установлен, чтобы добавить его в заголовок, но я не совсем уверен когда, где или как это должно происходить. Кстати, все это ново для меня. Я пытался создать и установить и получить методы Token Observables, но, вероятно, я делаю это неправильно. Я еще не разбираюсь в написании Observables. Мне просто нужно некоторое руководство о том, как получить токен с помощью Observables, если это даже лучший вариант.

login.component.ts

loginUser(){
  this.authenticateService.loginUser(this.loginUserData)
  .subscribe(
            res => {
                this.authenticateService.setToken(res.token)
                this.router.navigate(['/profile'])
            },
            err => console.log('ERROR: '+err)
            )
  }   

auth.service.ts


  //function to login user and athenticate user
  loginUser(user){
    return this.http.post<any>('/api/login',user)
  }

  //check if token exist in browser, the user is logged in
  isLoggedIn(){
    return (!!localStorage.getItem('token') && !localStorage.getItem('token') === null)

  }

setToken(token){
    localStorage.setItem('token', token)
}
 getToken(){ 
    return localStorage.getItem('token')

 }

лексем-interceptor.service.ts

intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>{

        const authToken = this.authService.getToken()
        console.log('token',authToken)
        if(authToken != null){
            const authReq = req.clone({
            headers: req.headers.set('Authorization','Bearer ' + authToken)
            });

            return next.handle(authReq);
        }else{
            return next.handle(req);
        }

}

Я ожидаю, что выходной токен на предъявителя не будет нулевым и фактически будет иметь токен. Метод перехвата сейчас не работает из-за того, что у меня есть подписка, но я просто не знаю, как это сделать.

...