VUE + ADAL acquToken, refre sh Тайм-аут - PullRequest
       35

VUE + ADAL acquToken, refre sh Тайм-аут

0 голосов
/ 08 января 2020

Может ли кто-нибудь сказать мне, почему я получаю тайм-аут , когда я использую ADAL -acquireToken для перефразирования sh токена, но за последние 5 минут он не обновляет sh правильно .

Мой код показан ниже, и я хочу знать, правильно ли я это делаю. Я тоже пробовал MSLA, он может обновить sh токен, используя acquireTokenSlient(), но токен не может быть использован в бэк-энде.

Я не знаю, где разместить эту функцию handleWindowCallback().

AuthService

import AuthenticationContext from "adal-angular";
export default class AuthService {
  private ctx: AuthenticationContext;
  private options: AuthenticationContext.Options;

  constructor(options: AuthenticationContext.Options) {
    this.options = options;
    this.ctx = new AuthenticationContext(options);

    new Promise((resolve, reject) => {                //   ???  add  this it can refresh after timeout
      console.log("this.ctx", this.ctx);
      if (
        this.ctx.isCallback(window.location.hash) ||
        window.self !== window.top
      ) {
        // redirect to the location specified in the url params.
        this.ctx.handleWindowCallback();
      } else {
        // try pull the user out of local storage
        let user = this.ctx.getCachedUser();

        // if (user) {
        //   resolve();
        // }
        // else {
        //   // no user at all - go sign in.
        //   this.login();
        // }
      }
    });
  }

  get accessToken() {
    return this.ctx.getCachedToken(this.options.clientId);
  }

  acquireToken(resource?: string): Promise<string> {
    this.ctx.handleWindowCallback();            //   ???
    resource = resource || this.options.clientId;
    return new Promise((resolve, reject) => {
      this.ctx.acquireToken(resource, (err, token) => {
        if (err) {
          reject(err);
          this.ctx.handleWindowCallback();      //   ???
        } else {
          this.ctx.handleWindowCallback();  //   ???
          resolve(token);
        }
      });
    });
  }
  ...
}

запрос

import { auth } from "@/plugins/auth";
export async function request(options: AxiosRequestConfig): Promise<any> {
  options.baseURL = URL.baseURL;
  const isMock = state.getters.setting.mock === true;
  if (isMock) {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        try {
          let data = getMockData(options);
          // debug
          options.url = formatURL(options.url, options.params);
          console.groupCollapsed(`mock ${options.method} ${options.url}`);
          console.dir({
            request: options,
            response: data
          });
          console.groupEnd();
          resolve(data);
        } catch (error) {
          console.error(error);
          reject(error);
        }
      }, randomNum(100, 2000));
    });
  }

  options.url = formatURL(options.url, options.params);
  options.headers = options.headers || {};
  options.headers["x-source"] = window.location.origin;
  let token = auth.accessToken;
  options.headers.Authorization = `Bearer ${token}`;
    auth
      .acquireToken()
      .then(token => {
        token2 = token;
        console.log("get token", token);
      })
      .catch(err => console.log("get error", err));
    setTimeout(() => {
      // let token2 = auth.accessToken;
      console.log("token error each", { token, token2 }, token === token2);
    }, 2000);


    return axiosRequest(options);
  }

...