Я создаю аутентификацию для входа в приложение, используя 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);
}
}
Я ожидаю, что выходной токен на предъявителя не будет нулевым и фактически будет иметь токен. Метод перехвата сейчас не работает из-за того, что у меня есть подписка, но я просто не знаю, как это сделать.