我启用了来自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
从未被调用,并且还有其他步骤。
请帮我搞清楚
我在NGIR项目中添加了Notification Interceptor,它工作正常,你可以在这个项目文件中看到响应拦截器的一个例子
Link to NGIR Notification Interceptor
希望能帮助到你。
您是否尝试在intercept()的开头放置一个console.log来查看它是否被触发?
您是否已将拦截器类添加到模块提供程序中,如下所示?
import { HTTP_INTERCEPTORS } from '@angular/common/http';
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MyHttpInterceptorClass,
multi: true
}
问题很简单。由于我已经对我的服务器进行了授权检查,并且角色检查我一直在收到错误,但是由于拦截器是Osbervable
,它有下一个回调next, error, complete
,我只接下来处理,同时得到错误。因此,当我遇到错误时,我没有得到任何标题。