0

我的想法是创建一个名为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);
    }
4

0 回答 0