Пытаясь поймать 401 в перехватчике http, обновите мой сеанс и повторите исходный запрос

Я знаю, что это было в течение 6 месяцев, однако ответ показывает в Google, что «добавление месяцев в python», если вы добавляете один месяц:

import calendar

date = datetime.date.today()    //Or your date

datetime.timedelta(days=calendar.monthrange(date.year,date.month)[1])

, это будет считать дни в текущем месяце и добавьте их к текущей дате, используя 365/12, объявление 1/12 года может вызвать проблемы в течение коротких / длинных месяцев, если вы повторяете дату.

1
задан David Alsh 13 March 2019 в 13:28
поделиться

2 ответа

Вероятно, несколько синтаксических ошибок в этом, потому что я пишу с мобильного, но это должно помочь вам начать

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
if (!request.url.startsWith('/api')) {
    return next.handle(request)
}

const cloned = request.clone()
return next.handle(request)
    .do((event: HttpEvent<any>) =>
        return from(this.sessionService.refresh())
               .pipe(map(() => next.handle(cloned)))
        }), (err: any) => {
             if (err instanceof HttpResponse) {
                  if(err.status === 401){
                       return throwError(error);
                  }
        }
    )
}
0
ответ дан TheBatman 13 March 2019 в 13:28
поделиться

Ответ заключался в использовании switctMap, а не map

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> 
{
    if (!request.url.startsWith('/api')) {
        return next.handle(request)
    }

    const cloned = request.clone()
    return next.handle(request)
        .pipe(
            catchError((error: any) => {
                if (error.status !== 401) {
                    return throwError(error)
                }
                return from(this.sessionService.refresh())
                    .pipe(switchMap(() => next.handle(cloned)))
        })
    )
}

Однако я выбрал альтернативный подход, при котором я проверяю, есть ли у меня сеанс до того, как произойдет запрос, добавляя действие обновления если требуется.

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    if (
        !request.url.startsWith('/api') || 
        this.sessionService.isValid
    ) {
        return next.handle(request)
    }

    return from(this.sessionService.refresh())
        .pipe(switchMap(() => next.handle(request)))
}
0
ответ дан David Alsh 13 March 2019 в 13:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: