【问题标题】:HttpInterceptor > HttpErrorResponse does not return the result of the requestHttpInterceptor > HttpErrorResponse 不返回请求的结果
【发布时间】:2019-12-05 16:26:33
【问题描述】:

我需要刷新我的令牌,但 HttpErrorResponse 不返回请求的结果。

获取http://127.0.0.1:8000/api/pdv 返回响应:{"token_error":"token_expired"}

但是,当我的令牌过期时,我收到(跨源请求被阻止)。只是这种情况。

这是我的配置
config/cors 我用的是 barryvdh/laravel-cors

'supportsCredentials' => false,
    'allowedOrigins' => ['*'],
    'allowedOriginsPatterns' => [],
    'allowedHeaders' => ['*'],
    'allowedMethods' => ['*'],
    'exposedHeaders' => [],
    'maxAge' => 0,

中间件组

'api' => [
    \Barryvdh\Cors\HandleCors::class,
    'throttle:60,1',
    'bindings',
],

我尝试用 (obs: console.log(error.error) is undefined) 得到响应

const error = (typeof errorResponse.error !== 'object') ? JSON.parse(errorResponse.error) : errorResponse.error;
                    console.log(error.error)

        return next.handle(request)
            .pipe(
                catchError((errorResponse: HttpErrorResponse) => {
                    // return next.handle(request)
                    const error = (typeof errorResponse.error !== 'object') ? JSON.parse(errorResponse.error) : errorResponse.error;
                    console.log(error.error)
                    // return ;
                    // || (errorResponse.status === 0)
                    if (errorResponse.status === 401 && error.error === 'token_expired') {
                        const http = this.injector.get(HttpClient);
                        return http.post<any>(`${API}/auth/refresh`, {})
                            .pipe(
                                flatMap(data => {
                                    localStorage.setItem("token", data.token)
                                    const authRequest = request.clone({ setHeaders: { 'Authorization': `Bearer ${data.token}` } })
                                    return next.handle(authRequest)
                                })
                            )
                    }

                    return throwError(errorResponse);
                })
            )

    }

我需要得到这个返回“token_expired”然后刷新令牌。

console.log(error.error)

console.log(errorResponse)

【问题讨论】:

  • 你的意思是 console.log(error.error) 什么都不打印吗?
  • 您是否收到任何回应?检查浏览器开发者控制台和网络选项卡。这可能是CORS 问题。 About the same origin policy.
  • @SumitParakh 是的,打印未定义。
  • 那么错误代码部分被击中了吗?你能准确地发布你收到的错误吗?
  • @AJT_82 只是 error.error 未定义。但 api 响应是 {"token_error":"token_expired"} 我需要得到这个响应。

标签: angular angular-http-interceptors


【解决方案1】:

您似乎已经在解析错误对象,然后将解析结果保存到错误变量中。那么在这种情况下,为什么需要使用 error.error 呢?你不能像这样使用 error 变量吗?:--

替换

console.log(error.error);

console.log(error);

【讨论】:

    猜你喜欢
    • 2022-09-24
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    相关资源
    最近更新 更多