首次成功登录后,Okta登录小部件JavaScript无法解析parsFromUrl id_token

时间:2019-12-06 19:21:22

标签: javascript okta

我曾尝试在Okta论坛上发帖,但那里没有运气,所以我将在这里尝试。

我正在使用here

中的Okta登录小部件示例

此页面上的代码示例似乎已经过时,并且适用于<3.0。原因是我发现this post描述了此问题以及用于3.0+的正确语法

从<3.0

开始的3.0或更高版本的替换语法
oktaSignIn.token.hasTokensInUrl
–>
oktaSignIn.hasTokensInUrl

oktaSignIn.token.parseTokensFromUrl
–>
oktaSignIn.authClient.token.parseFromUrl

oktaSignIn.session.get(function (res) {...
–>
oktaSignIn.authClient.session.get().then(function (res) {...

一旦我替换了语法,登录屏幕就会出现,并且我能够登录并通过id_token成功登录并返回我的应用程序。

问题在于,oktaSignIn.authClient.token.parseFromUrl(似乎无法解析URL并因此中断。

控制台

Uncaught TypeError: e.indexOf is not a function
    at b (token.js:654)
    at Object.parseFromUrl (util.js:70)

如果我返回原始日志页面,它将知道我已经登录并且可以正常工作,并且知道我已经回来了,并且会收到“欢迎回来,我@ example.com”。这个问题是在首次成功登录时会中断。

  var oktaSignIn = new OktaSignIn({
      logo: 'https://www.example.com/images/1.jpg',
    baseUrl: "https://dev-******.okta.com",
    clientId: "*******************",
    authParams: {
      issuer: "https://dev-******.okta.com/oauth2/default",
      responseType: ['token', 'id_token'],
      display: 'page'
    }
  });
  if (oktaSignIn.hasTokensInUrl()) {
    oktaSignIn.authClient.token.parseFromUrl( <---- it breaks here after first successful login
      function success(tokens) {
        // Save the tokens for later use, e.g. if the page gets refreshed:
        // Add the token to tokenManager to automatically renew the token when needed
        tokens.forEach(token => {
          if (token.idToken) {

            signIn.tokenManager.add('idToken', token);
          }
          if (token.accessToken) {
            signIn.tokenManager.add('accessToken', token);
          }
        });

        // Say hello to the person who just signed in:
        var idToken = signIn.tokenManager.get('idToken');
        console.log('Hello, ' + idToken.claims.email);

        // Remove the tokens from the window location hash
        window.location.hash='';
      },
      function error(err) {
        // handle errors as needed
        console.error(err);
      }
    );
  } else {
    oktaSignIn.authClient.session.get().then(function (res) {
      // Session exists, show logged in state.
      if (res.status === 'ACTIVE') {
        console.log('Welcome back, ' + res.login);
        return;
      }
      // No session, show the login form
      oktaSignIn.renderEl(
        { el: '#okta-login-container' },
        function success(res) {
          // Nothing to do in this case, the widget will automatically redirect
          // the user to Okta for authentication, then back to this page if successful
        },
        function error(err) {
          // handle errors as needed
          console.error(err);
        }
      );
    });
  }

有什么想法吗?

0 个答案:

没有答案