我已经从tymon authorizeAndRefresh
启用了Laravel API后端中间件,据我所知,它应该刷新令牌并发回。为此,我做了一个拦截器
intercept(req: HttpRequest<any>, next: HttpHandler):
Observable<HttpEvent<any>> {
const authToken = localStorage.getItem('fb_token');
if (authToken) {
const request = req.clone({
headers: req.headers.set('Authorization', 'Bearer ' + authToken)
});
return next.handle(request).pipe(
tap(event => {
console.log(event);
if (event instanceof HttpResponse) {
if (event.headers['token']) {
console.log(event.headers);
const token = event.headers['Authorization'].split(' ')[1];
localStorage.setItem('fb_token', token);
this.store.dispatch({type: Actions.AUTHENTICATED});
} else {
this.store.dispatch({type: Actions.DEAUTHENTICATED});
}
}
})
);
}
return next.handle(req);
}
但是,似乎没有响应句柄,因为从未console.log
被调用,也没有进一步的步骤。
请帮我弄清楚
答案 0 :(得分:0)
答案 1 :(得分:0)
您是否尝试过将console.log放置在拦截()的开头,以查看它是否完全被触发了?
您是否已按照以下说明将拦截器类添加到模块提供程序?
import { HTTP_INTERCEPTORS } from '@angular/common/http';
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MyHttpInterceptorClass,
multi: true
}
答案 2 :(得分:0)
问题很简单。由于我已经在服务器上进行了授权检查,而且还进行了角色检查,因此我一直遇到错误,但是由于拦截器是Osbervable
,因此它具有下一个回调next, error, complete
,在出错时我仅处理下一个回调。因此,当我遇到错误时,我没有任何标题。