Auth0异步等待返回会话用户

时间:2019-07-27 17:34:24

标签: reactjs promise async-await auth0

我已经使用带有react和hook的自定义输入设置了Auth0。我正在尝试保护我的路线,以便用户根据我们的API指示路线的位置以及从中返回的信息。为此,我在setSession内设置了用户数据,但是该项未定义返回/与auth0Client.client.userInfo无关,而setSession功能尚未完成。

const setSession = async authResult => {

    const expiresAt = JSON.stringify(
      authResult.expiresIn * 1000 + new Date().getTime()
    )
    localStorage.setItem('access_token', authResult.accessToken)
    localStorage.setItem('id_token', authResult.idToken)
    localStorage.setItem('expires_at', expiresAt)
    localStorage.setItem('auth', true)

    setAuthenticated(true);

    await auth0Client.client.userInfo(authResult.accessToken, (err, user) => {
      localStorage.setItem('user', JSON.stringify(user))
      setUser(JSON.stringify(user));
    })
  }

我在句柄身份验证中调用setSession:

  const handleAuthentication = () => {
    console.log("auth0Client", auth0Client);
    if (typeof window !== 'undefined') {
        auth0Client.parseHash(async (err, authResult) => {
            if (authResult && authResult.accessToken && authResult.idToken) {
              await setSession(authResult);
              history.replace('/');
            } else if (err) {
              console.log(err)
              return err;
            }
        })
      }
  }

我尝试返回值并改为通过以下方式调用它:

await setSession(authResult).then(
            () => history.replace('/')
        )

无论哪种方式,它第一次访问我想要的路由时,其用户的值为空。

我在此处放置了完整的模拟回购。您可以创建帐户,如果要创建其他帐户,请使用带有+ modifier /示例test+1@test.com

的同一封电子邮件

https://github.com/Sbphillips19/ManualAuth0Flow

我敢肯定这很简单,我刚刚反复尝试了100种不同的方式,但看不到它。

1 个答案:

答案 0 :(得分:0)

我会给Jim和Jfriend00答案,但是由于这是评论,我无法使用Bluebird给出答案:

   await new Bluebird(function (resolve, reject) {
    auth0Client.client.userInfo(authResult.accessToken, (err, user) => {
      if (err) return reject(err)
      resolve(user);
    })
    }).then(
        data => 
        {
            localStorage.setItem('user', JSON.stringify(data))
            setUser(JSON.stringify(data));

        }
    )

似乎auth0讨论了将其所有功能转换为能够使用异步等待的问题,但目前bluebird会这样做!