调用服务方法并在拦截器中正确使用它

时间:2019-01-11 03:32:04

标签: angular service angular-httpclient angular-httpclient-interceptors

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

0 个答案:

没有答案