我的想法是创建一个称为loggingIn()的服务方法,我想在拦截器中调用它。 loggingIn()服务方法应传递一个有效的令牌,该令牌在localStorage中可用。除了存在之外,我还想通过从服务器调用verifytoken API来检查该令牌的有效性。服务中的verifytoken方法中的post调用将执行此操作。
正如您在代码中所看到的那样,我正在loggingIn()内调用verifytoken服务方法。这是调用同一服务的事件方法的有效方法吗?
由于loggingIn()将异步传递verifytoken结果,因此在拦截器中调用它时是否需要订阅loggingIn()服务方法?
为我服务:
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);
}