Угловая гвардия и JWT - PullRequest
       20

Угловая гвардия и JWT

0 голосов
/ 10 декабря 2018

Я пытаюсь сделать следующее ... У меня есть API, где я отправляю токен JWT с помощью POST, чтобы убедиться, что он действителен / истек,

, поэтому в моей службе углового входа у меня естьметод, подобный этому.

isUserlogged() {
  return this.httpClient.get(`${this.URL}/verifyToken`, { headers: { 'authorization': localStorage.getItem('token') } })   
}

эта подписка возвращает логическое значение, все в порядке здесь.

Теперь я реализую Guards в своем приложении, так что теперь я хочу использовать это логическое значение для моего canActivateметод для блокирования доступа ... я прочитал, что мне нужно вернуть, true или false в этом методе, чтобы разрешить или заблокировать доступ к маршрутам, которые я настроил до

Так что я делаю что-то подобное внутриcanActivate.

this.loginService.isUserlogged().subscribe((response: boolean)=>{  

if(response){
   return true;
}
   return false;
});

но это возвращает пустоту ... почему?Как я могу получить истинное или ложное значение из этой подписки?

1 Ответ

0 голосов
/ 10 декабря 2018

Не возвращайте подписку изнутри маршрута охраннику. Если не булево значение, тогда возвращайте наблюдаемое логического значения.

return this.loginService.isUserlogged()

Так как isUserlogged уже дает вам логическое значение здесь, вы можетеверните Observable напрямую.

Если isUserlogged() не возвращает логическое значение, тогда передайте его по трубопроводу.

return this.loginService.isUserlogged().pipe(
    map((resp) => {
        // some logic here, check the return.
        // based on the logic
        if (something) {
            return true
        }
        return false
    })
)

Все это будет работать, если ваш API вызов завершается и возвращает правильныйответ.Если ваш API возвращает void, то вы не предоставили никаких подробностей относительно вашего вызова API, и ваш API работает.(Сначала протестируйте свой API с помощью HTTP-клиента, например: Почтальон, если он дает правильный ответ, а затем интегрируйте его с Angular)

...