无法退出。基于Auth0的React Native Expo应用程序。

3

我正在努力理解在React Native Expo应用程序中使用Auth0进行身份验证,但是我似乎无法登出。这意味着我也无法切换登录帐户。我能够在新设备上首次启动应用程序时登录。在初始登录后,静默认证开始运行,因为我无法注销,所以我保持登录状态。

注销时,我访问了Auth0注销url:

const logout = async () => {
    try {
        await axios.get(`${domainUrl}/v2/logout?client_id=${clientId}`)
    } catch (err) {
        console.error(err)
    }
}

....

<Button
    title='Sign out'
    onPress={logout}
/>

在我的Auth0日志中,Auth0明确表示:用户已成功注销
我使用AuthSessionNew.useAuthRequest()来处理登录:
const [request, response, promptAsync] = AuthSessionNew.useAuthRequest(
    {
        clientId,
        responseType: 'id_token',
        scopes: ['app', 'name'],
        extraParams: {
            nonce: 'nonce',
        },
        redirectUri,
    },
    discovery,
)

....

<Button
    disabled={!request}
    title='Sign in'
    onPress={() => promptAsync({ useProxy })}
/>

与注销一样,每当我调用登录按钮时,在Auth0日志中都会得到成功的登录记录:成功登录

response最初为null,直到第一次登录。登录后,即使应用程序关闭或未关闭,它也会持续存在。我想这是一种期望的行为,可以通过这种方式查看用户是否已登录应用程序。但是,我想一旦调用注销路由,它就应该被清除。

有人知道这里发生了什么吗?为什么尽管Auth0日志显示已注销,但我无法注销?

请参考https://auth0.com/docs/api/authentication?http#logout上的文档。

由于这是一个移动应用程序,因此在注销后没有重定向URL。

federated也试过了,但没有任何区别。

响应对象的样式如下:

Object {
  "authentication": null,
  "error": null,
  "errorCode": null,
  "params": Object {
    "exp://192.168.10.187:19000/--/expo-auth-session": "",
    "id_token": "JWT-TOKEN",
    "state": "BQK8UJc9sK",
  },
  "type": "success",
  "url": "exp://192.168.10.187:19000/--/expo-auth-session#id_token=JWT-TOKEN",
}

不确定为什么它显示authentication: nulltype: success

我真的很感激有人可以看看这个。如果有任何信息缺失,请告诉我,我会将其添加到帖子中。提前致谢。

Stephan Valois

2个回答

0

我目前也处于同样的情况,但我已经找到了一个临时解决方案。

WebBrowser.openAuthSessionAsync('https://YOUR_DOMAIN/v2/logoutclient_id=YOUR_CLIENT_ID&returnTo=LOGOUT_URL', 'redirectUrl')

-1

可能回答有点晚了,但如果有人需要,我是用以下方式完成的:

{name ? (
        <>
          <Text style={styles.title}>You are logged in, {name}!</Text>
          <Button
            title="Log out"
            onPress={async () => {
              setName(null);
              setToken(null);
              window.location.replace(
                "https://<YOUR_DOMAIN>/v2/logout?client_id=<YOUR_CLIENT_ID>&returnTo=<WHERE TO RETURN>"
              );
            }}
          />
        </>
      )

检查一下,我正在使用window.location.replace,但是你也可以使用window.location.assign。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接