管理的 Auth0 React Native 补丁用户 API

Auth0 React Native patch user by Management API

我想在我的 Auth0 身份验证中修补用户的 user_metadata,但我收到以下错误:

{"error": "Unauthorized", "message": "Missing authentication", "statusCode": 401}

所以我在我的 React Native 中导入了 Auth0:

import Auth0 from "react-native-auth0";

const auth0 = new Auth0({
 domain: Config.AUTH0_DOMAIN,
 clientId: Config.AUTH0_CLIENT_ID
});

我在我的应用程序中使用仪表板中的常量 Config.AUTH0_DOMAIN Config.AUTH0_CLIENT_ID

作为下一步,我执行以下代码:

 login = () => {
    auth0.webAuth
      .authorize({
        scope: Config.AUTHO_SCOPE,
        audience: Config.AUTH0_AUDIENCE,
        device: DeviceInfo.getUniqueID(),
        prompt: "login"
      })
      .then(res => {
        auth0.auth
            .userInfo({token: res.accessToken})
            .then(data => {
              fetch(`https://<MY_AUTH_DOMAIN>/api/v2/users/${encodeURIComponent(data.sub)}`, {
                method: "PATCH",
                headers: {
                  'Content-Type': 'application/json'
                },
                body: JSON.stringify({
                  "metadata": {first_name: 'John', last_name: 'Doe', skillLevel: 'PRO!'}
                })
              }).then(res => res.json())
                  .then(async (data) => {
                    try {
                      console.log('user stored', data);
                    } catch (e) {
                      console.log("error while user storing", e)
                    }
                  })
            })
      })
  }

其中 Config.AUTHO_SCOPEConfig.AUTH0_AUDIENCE 也来自我的 auth0 的应用仪表板。

我是否在我的 headers 中遗漏了一些身份验证,或者管理 API 是错误的选择?我是否需要从我的 Back-End 查询此查询?

资源:

来自管理层的官方 API 文档 API:https://auth0.com/docs/api/management/v2?_ga=2.147997749.368915485.1617866251-2089752765.1617460658#!/Users/patch_users_by_id

官方 react-native-auth0 文档:https://auth0.github.io/react-native-auth0/src_management_users.js.html

感谢您的帮助!

我遇到了这个问题,经过一些工作后它开始工作了。

首先,我必须将我的项目配置为在 Applications/Apis 的 Auth0 仪表板中授予元数据写入权限。

我添加的两个是read:current_userupdate:current_user_metadata。 然后,在我的授权请求中,我修改了范围和受众。

audience: 'https://<MY APP DOMAIN>/api/v2/'

scope: 'read:current_user update:current_user_metadata openid profile offline_access'

接下来,我通过将我的身份验证令牌传递给 auth.userInfo 来获取 userId。

auth0.auth.userInfo({token: authToken}).then((response)=>{
        return response.sub;
    })

最后,我使用了 response.sub 中的值 returned 以及我为特殊受众和范围设置的 authToken 来修补用户,并且成功运行。 UserId 是 response.sub returned.

auth0.users(authToken).patchUser({id: userId, metadata: newUserMetadata});

编辑:

我在你的代码片段中看到的另一个问题是,如果你想使用 fetch,你没有在 header 中放置不记名授权令牌。如果是这种情况,您的提取响应可能会 return 并出现 401 错误。代码应如下所示:

const serverResponse = await fetch('https://<MYAPP>.auth0.com/api/v2/users/' + user.sub,{
                    headers:{
                        Authorization: 'Bearer ' + accessToken
                    }
                })