我已将 API 中的 accessToken 存储在本地存储中。我可以使用拦截器毫无问题地调用 API.....
import { HttpInterceptor, HttpRequest, HttpHandler } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor() {}
intercept(req: HttpRequest<any>, next: HttpHandler) {
let authRequest = req;
const authToken = localStorage.getItem('token');
if (authToken) {
console.log('injecting bearer token');
authRequest = req.clone({
headers: req.headers.set('Authorization' , 'Bearer ' + [authToken])
});
} else {
console.log('not injecting bearer token');
}
return next.handle(authRequest);
}
}
但是,当我转到使用附加组件路由的另一个页面时...
singleToggle() {
this.router.navigate(['singleItem', this.id]);
this.singleItem = !this.item;
}
拦截器未正确加载,API 声明我未登录且语言环境存储中的 accessToken 显示为 null。这只发生在 safari 上。 Chrome、Edge 和 Firefox 工作正常。