这三个方法定义了我如何处理登录。
// Component.
onLogged() {
this.auth.login(this.user).subscribe({
next: (data: any) => {
console.log('Connection established.');
let token = data.headers.get('Authorization')!;
this.auth.saveToken(token);
this.router.navigate(['/']);
}
});
}
// Auth Service.
login(user: User) {
console.log('Connecting...');
return this.http.post<User>(this.url + '/login', user, {observe: 'response'});
}
// Interceptor.
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let token = localStorage.getItem('token');
if (token) {
// Adds token to header.
request = request.clone({
setHeaders: {
Authorization: `Bearer ${token}`
}});
}
return next.handle(request).pipe(
catchError((error: HttpErrorResponse) => {
if ([401, 403].includes(error.status)) { console.log('Access denied to the ressource.'); }
return EMPTY;
})
);
}
但是,即使使用拦截器和返回 EMPTY 块,控制台上仍然出现 401 错误。 我真的不知道我做错了什么,或者我错过了什么。
我搜索了有关相同问题的最新主题,但它们已经过时了! 如果有人能帮助我,我真的很感激! :)
查看下面的链接。我猜这是由于浏览器的默认行为 在 chrome 开发工具中隐藏 401 console.error,在 fetch() 调用时出现 401 错误