Моя идея состояла в том, чтобы создать один сервисный метод с именем loggedIn (), который я хочу вызвать в перехватчике.
Сервисный метод loggedIn () должен доставить действительный токен, который доступен в localStorage. В дополнение к существованию я хочу проверить действительность того токена, который вызывает API-интерфейс verifytoken с сервера. Это сделает почтовый вызов в методе verifytoken внутри службы.
Как видно из кода, я вызываю метод сервиса verifytoken в loggedIn (). Является ли это допустимым подходом для вызова методов инцидентов той же службы?
Поскольку 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);
}