我的想法是创建一个名为loggedIn() 的服务方法,我想在拦截器中调用它。loggedIn() 服务方法应该提供一个在 localStorage 中可用的有效令牌。除了存在之外,我还想检查该令牌的有效性,因为我从服务器调用 verifytoken API。服务中的 verifytoken 方法中的 post 调用将执行此操作。
正如您在代码中看到的那样,我在loggedIn() 中调用verifytoken 服务方法。这是调用同一服务的事件方法的有效方法吗?
由于loggedIn() 将异步传递verifytoken 结果,在拦截器中调用它时是否需要订阅loggedIn() 服务方法?
在我的服务中:
loggedIn(): string{
let tok = localStorage.getItem('token');
if (tok=== null || tok === undefined || tok === ""){
return "";
}else{
//return tok;
this.verifyToken(tok).subscribe(
res => {
console.log(res);
console.log(res.success);
return tok;
},
err => {
console.log(err);
return "";
}
)
}
}
verifyToken( tok: string ){
let headers = new HttpHeaders({
'Content-Type': 'application/json',
'Authorization': tok });
let options = { headers: headers };
return this.http.post<any>(this.verifyUrl, "", options );
}
在我的拦截器中:
intercept(req, next){
//Interceptor ausschliessen
const exclude = "/verifytoken";
console.log('Exclude' +req.url.search(exclude));
console.log('Req '+req.url);
let tokenizedRequest = req;
if (req.url.search(exclude)===-1){
//req clonen und mit header anreichern
let mytoken = this.authServ.loggedIn();
console.log('Token im Intercept '+mytoken);
tokenizedRequest = req.clone({
setHeaders: {
Authorization: mytoken
}
});
}
return next.handle(tokenizedRequest);
}