Angular 拦截http调用
Angular interceptor http call
我有一个从后端获取 JWT 的应用程序。此 JWT 的有效期为 15 分钟。当我将 JWT 从前端发送到后端时,HTTP 拦截器将 JWT 附加到授权 header.
我尝试做的是:
在 Http 拦截器中检查令牌是否仍然有效,如果无效则向后端端点发送请求以获取新的 JWT。
我的问题是:如果我拦截每个附加 header 的调用,如果我在拦截器本身中执行 http 请求,我将进入循环。
这是我的拦截器:
intercept(req: HttpRequest<any>, next: HttpHandler) {
let authReq = req;
const token = this.userService.getUserInfo()?.token;
const jwtHelper: JwtHelperService = new JwtHelperService();
if (token != null) {
if (!jwtHelper.isTokenExpired(token)) {
authReq = req.clone({headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token)});
} else {
this.authenticationService.getToken();
return;
}
}
return next.handle(authReq);
}
正确的做法是什么?
服务器应该处理令牌的有效性,这不是客户端的逻辑。
发送带有令牌的请求,如果响应将具有 401/403/任何状态,请发送新令牌请求。
我有一个从后端获取 JWT 的应用程序。此 JWT 的有效期为 15 分钟。当我将 JWT 从前端发送到后端时,HTTP 拦截器将 JWT 附加到授权 header.
我尝试做的是:
在 Http 拦截器中检查令牌是否仍然有效,如果无效则向后端端点发送请求以获取新的 JWT。
我的问题是:如果我拦截每个附加 header 的调用,如果我在拦截器本身中执行 http 请求,我将进入循环。
这是我的拦截器:
intercept(req: HttpRequest<any>, next: HttpHandler) {
let authReq = req;
const token = this.userService.getUserInfo()?.token;
const jwtHelper: JwtHelperService = new JwtHelperService();
if (token != null) {
if (!jwtHelper.isTokenExpired(token)) {
authReq = req.clone({headers: req.headers.set(TOKEN_HEADER_KEY, 'Bearer ' + token)});
} else {
this.authenticationService.getToken();
return;
}
}
return next.handle(authReq);
}
正确的做法是什么?
服务器应该处理令牌的有效性,这不是客户端的逻辑。
发送带有令牌的请求,如果响应将具有 401/403/任何状态,请发送新令牌请求。