Есть сервис пользователей в котором реализована работа с бэкендом по авторизации, регистрации и так далее.
Алгоритм такой:
Есть метод получения токена из ЛС:
getToken() {
this.token = this.storageService.get('token');
return true;
};
И проверки этого токена на стороне сервера:
tokenVerify() {
return this.http.post(this.verifyUrl, JSON.stringify({
token: this.token,
}
),{headers: this.headers})
.toPromise()
.then(response => {
if(response.json().token == this.token) {
this.headers.append('authorization', `JWT ${this.token}`);
}
})
.catch(this.handleError);
};
В случае успешной проверки токен будет включен во все хедеры запроса.
А так же метод проверки авторизации
checkAuth() {
if (this.getToken() && this.tokenVerify()) {
return true;
}
else return false
};
+Есть метод получения имени пользователя через токен
getMyUserName(): Promise<ICatalogUser> {
console.log('Получаем имя');
console.log(this.headers);
return this.http.get(this.meUrl, {headers: this.headers})
.toPromise()
.then(response => response.json() as ICatalogUser)
.catch(this.handleError);
};
Главная проблема в том что метод проверки токена асинхронный и метод получения имени асинхронный и когда я пытаюсь в компоненте проверять авторизацию и получать имя пользователя то ничего не выходит из-за того что токена еще нет во время проверки:
ngOnInit(): void {
this.getPosts();
this.checkAuth();
this.user = this.userService.me;
}
Подскажите пожалуйста как лучше решить эту проблему?