Я работаю над приложением angular и изо всех сил пытаюсь внедрить проверку токенов носителя API.
Процесс выглядит следующим образом:
- Authguard просит AuthService проверить локально сохраненный токен аутентификации
canActivate(): boolean {
if(this.AuthService.isAuthenticated()){
return true;
} else{
this.router.navigate(['elsewhere/maybeToSwimmingPool']);
}
}
Вызов метода AuthService isAuthenticated, который будет извлекаться, если токен действителен от API
isAuthenticated(){
if(localStorage.getItem('token')){
this.verifyToken().subscribe(
data => {return data;}
)
}else{
return false;
}
}
verifyToken() : Observable<boolean>{
const url = this.apiVerifyTokenUrl + '/' + localStorage.getItem('token');
return this.http.get<boolean>(apiVerifyTokenUrl, this.httpOptions);
}
API декодирует токен, проверяет, существует ли пользователь в базе данных и возвращает логическое значение
exports.verifyToken = (req, res, next) => {
try{
verifiedJwt = jwt.verify(req.params.token, secret);
let userId= verifiedJwt.userId;
User.findOne({_id: userId})
.then(() => res.status(200).send('true'))
.catch(error => res.status(200).send('false'));
}
catch(e){
res.status(200).send('false');
}
}
Я не уверен, какое чудовище я запрограммировал. Может быть, Authguard не может асинхронно ждать наблюдаемого? Я действительно не знаю, что не так с моим кодом. Надеюсь, вы, ребята, сможете найти смертельную ошибку и дать мне совет относительно моего кода? Это мой первый шаг со средним стеком, и я приветствую каждый совет, критику:)
Хорошего дня, Элке Джонсон