Приостановить запросы API, пока токен сбрасывается [Angular] - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть приложение, которое использует шлюз API. Когда пользователь входит в систему, он предоставляет токен, который работает только в течение часа.

Что делает этот шлюз необычным, так это то, что этот токен используется всеми пользователями, а время обновления НЕ является уникальным для сеанса. Он не может быть обновлен в любое время, но имеет установленное время, скажем, 5 минут и 32 секунд в каждый час.

Пока что мне нужно управлять обновлением токена:

// This will get the Gateway Token
getToken = (baseUrl, httpOptions) => { 
     return this.http.post<oAuthResponse>(baseUrl + 'token', 'grant_type=client_credentials', httpOptions)
}

// this will be called when the token needs to be renewed
renewToken = (baseUrl, httpOptions) => {
       this.getToken(baseUrl, httpOptions).subscribe( (res:any) => {
            this.keepAlive(res.expires_in)
       })
}

// this triggers the renewal at the set time
keepAlive = (t) => {
        setTimeout(()=>{
            this.setToken()
        }, t*1000 )
}

Однако я столкнулся с проблемой, когда мои запросы API возвращают 401 error, в то время как токен обновляется.

Я бы хотел иметь возможность ставить в очередь другие запросы API, пока вызывается getToken() или renewToken(). Таким образом, запросы, сделанные во время возврата этого вызова, ждут, пока он не будет выполнен.

Как бы я go сделал это? Мои текущие запросы API настроены так:


  public get = (req:string) => {

    const httpOptions = {
      headers: new HttpHeaders({
        'Content-Type' : 'application/x-www-form-urlencoded',
        'Authorization': 'Bearer ' + this.cache.token
      })
    };
    return this.http.get<Response>(this.cache.baseUrl + req, httpOptions)
  }



...