如何正确拦截请求

时间:2019-08-13 16:01:39

标签: angular angular-http-interceptors

我已经建立了一个拦截器类,将jwt令牌添加到请求标头中,但是请求仍然没有令牌。

我已经建立了该类,并在调用console.log之前放置了request.clone,以查看我的令牌是否真的存在。但似乎它没有传递给请求:

export class JwtInterceptor implements HttpInterceptor {
        constructor(private authenticationService: AuthenticationService) { }

        intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
                // add authorization header with jwt token if available
                let currentUser = this.authenticationService.currentUserValue;
                let currentToken = this.authenticationService.currentTokenValue;

                if (currentUser && currentToken) {
                    console.log(currentToken);

                    const cloned = request.clone({
                                setHeaders: {
                                        Authorization: `Bearer ${currentToken}`
                                }
                        });
                }

                return next.handle(request);
        }
}

console.log显示令牌。

我的服务功能:

export class UserService {
        constructor(private http: HttpClient) { }

        getAll() {
                return this.http.get<User[]>(`${environment.apiUrl}/users`);
        }
}

在成功记录后发出请求。我重定向到主页,然后ngInit调用此方法。

我希望使用标头中的令牌来进行请求,但该请求没有通过(对不起,我的英语)。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

您创建了cloned,但没有执行任何操作。退回它。

intercept(request: HttpRequest<any>, next: HttpHandler) {
    // ... yada yada yada ...
      if ... {
        return request.clone({ setHeaders: { Authorization: `Bearer ${currentToken}` } });
      }
      return next.handle(request);   
}