Как проверить, вернулась ли веб-страница 401? - PullRequest
0 голосов
/ 19 ноября 2018

Я внедрил службу, и для этой службы требуется токен JWT.

Когда срок действия токена JWT истекает ниже, он отображается на самой странице.

<oauth>
<error_description>
Access token expired: <token_value>
</error_description>
<error>invalid_token</error>
</oauth> 

В угловых все, что я маршрутизации является

{ path: '', component: HomeComponent }

Пример:

когда я запускаю страницу (локально - https://localhost:8080/) Я получил бы ошибку истекшего токена. Я хотел захватить 401 как загрузку страниц.

Так как мне проверить, возвращает ли текущая страница 401? Например, скажем, если пользователь обновляет страницу, как получить ответ 401, а не показывать его на самой веб-странице.

1 Ответ

0 голосов
/ 20 ноября 2018

Я не уверен, что понимаю весь контекст, также неясно, можете ли вы прочитать файл cookie или нет, если вы можете прочитать файл cookie, в HomeComponent у вас может быть способ проверить, есть ли токен в файле cookie. истек срок действия до того, как вы позвоните в службу, которой нужен токен (поэтому вы не получите 401)

 import { CookieService } from 'ngx-cookie';
 @Component({
    selector: 'home-component',
    templateUrl: './app.component.html',
    styleUrls: ['./app.component.scss']
 })
 export class HomeComponent {
  tokenValid = true;
  constructor(public cookie: CookieService) {}

  ngOnInit(){
   this.tokenValid = this.isAccessTokenValid();
   if(this.tokenValid) {
     //call a service that uses the token
   }else {
     //do whatever
   }

  }

  isAccessTokenValid(): boolean {
   const acc_token = this.cookieService.get('token_in_cookie'); // use your key
   if (!!acc_token) {
     if (jwtService.isTokenExpired(acc_token)) {
       return false;
     }
     return true;
   } else {
   return false;
  }
 }

}

Если вам нужно просто обработать 401 с сервера, то вам, возможно, потребуется реализовать и перехватчик, как предложено в предыдущих комментариях выше, что-то вроде ...

@Injectable({
  providedIn: 'root'
})
export class HttpRequestInteceptorError implements HttpInterceptor {

 constructor() { }

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

   return next.handle(req).pipe(catchError(err => {
     if (err instanceof HttpErrorResponse) {

      // Token expired
      if (err.status === 401) {
        // refresh access_token or whatever
      }
    }
    return throwError(err);
  }));
 }
}

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...