OID C - правильный поток входа для клиента js - PullRequest
1 голос
/ 06 апреля 2020

У меня есть сборка приложения с Vue. js, и я пытаюсь реализовать клиент OID C. Но я не уверен, что я полностью понимаю поток. Я следовал примеру приложения для OID C Vue client , где в SecurityService вызывается метод getSignedIn, который проверяет, существует ли user, и вызывает signIn метод, если нет user. В signIn вызывается метод OIDC client, метод signinRedirect, который возвращает user из обещания:

  // Check if there is any user logged in
  getSignedIn () {
    let self = this
    return new Promise((resolve, reject) => {
      mgr.getUser().then(function (user) {
        if (user == null) {
          self.signIn()
          return resolve(false)
        } else{
          return resolve(true)
        }
      }).catch(function (err) {
        console.log(err)
        return reject(err)
      });
    })
  }

  // Redirect of the current window to the authorization endpoint.
  signIn () {
    mgr.signinRedirect().catch(function (err) {
      console.log(err)
    })
  }

Я пытался реализовать то же самое в своем классе обслуживания AuthService:

const usermanager = oidc.getOidcUserManager();

export default class AuthService {

    // Check if there is any user logged in
    getSignedIn () {
        let self = this;
        return new Promise((resolve, reject) => {
            usermanager.getUser().then(function (user) {
                if (user === null) {
                    self.signinRedirect();
                    return resolve(false);
                } else{
                    return resolve(true);
                }
            }).catch(function (err) {
                console.log(err);
                return reject(err);
            });
        })
    }

    // Redirect of the current window to the authorization endpoint.
    signIn() {
        usermanager.signinRedirect().catch(function (err) {
            console.log(err);
        });
    }
}

Затем, если я вызову это в моем App.vue в created методе:

    data: () => ({
        authService: new AuthService(),
    }),
    created() {
        this.authService.getSignedIn();

, я получу ошибку ниже в консоли , и приложение постоянно обновляется в браузере в l oop постоянно:

UserManager.getUser: user not found in storage

Если я использую OID C клиент менеджер signinRedirectCallback вместо signinRedirect, вот так:

    // Redirect of the current window to the authorization endpoint.
    signIn() {
        usermanager.signinRedirectCallback().catch(function (err) {
            console.log(err);
        });
    }

Тогда я получаю ошибку от Promise:

Error: No matching state found in storage

Как правильно это реализовать, и как мне исправить это?

...