开发者问题收集

可能未处理的承诺拒绝(id:0):TypeError:null不是对象

2022-11-04
1766

我收到以下错误..

WARN Possible Unhandled Promise Rejection (id: 0): TypeError: null is not an object (evaluating 'this.Auth0Module.hasValidCredentialManagerInstance')

更新 - 奇怪的是,当模拟器在 Android Studio 中运行时没有错误。但是,当从 VSCode 运行模拟器时,会出现错误。

这是我目前的代码... 环境变量工作正常,在 Auth0 端,我相信我已经设置了必要的应用程序 URI。

我理解该错误本质上是说,我们找不到您正在寻找的 Auth0Module 对象属性的任何值?

我不确定如何解决此错误或从哪里开始。欢迎大家提出建议。

import {AUTH0_DOMAIN, CLIENT_ID} from '@env';
import { StatusBar } from 'expo-status-bar';
import React from 'react';
import { Button, StyleSheet, Text, View } from 'react-native';
import {useAuth0, Auth0Provider} from 'react-native-auth0';

export default function App() {
  return (
    <Auth0Provider domain={`${AUTH0_DOMAIN}`} clientId={`${CLIENT_ID}`}>
      <View style={styles.container}>
        <Text style={styles.title}>Open up App.js to start working on your app!</Text>
        <StatusBar style="auto" />
        <LoginButton />
      </View>
    </Auth0Provider>
  );
};

const LoginButton = () => {
  const {authorize} = useAuth0();

  const onPress = async () => {
    try {
      await authorize();
    }
    catch(error) {
      console.log('this is an error: ',error);
    }
  }

  return <Button onPress={onPress} title="Log In"></Button>
}

console.log(AUTH0_DOMAIN);

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#4f5',
    alignItems: 'center',
    justifyContent: 'center',
    borderStyle: 'solid',
    borderColor: 'black',
    borderWidth: 5,
    
  },
  title : {
    fontSize: 30,
  }
});

这是 app.json

{
  "expo": {
    "name": "myPackage",
    "slug": "myPackage",
    "version": "1.0.0",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#ffffff"
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": true
    },
    "android": {
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive-icon.png",
        "backgroundColor": "#ffffff"
      },
      "package": "com.myPackage"
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "plugins": [
      [
        "react-native-auth0",
        {
          "domain": "myDomain"
        }
      ]
    ]
  }
}

这是一张包含更多信息的图片:

在此处输入图片描述

2个回答

始终从库的源代码开始,例如,您的错误发生在这里: https://github.com/auth0/react-native-auth0/blob/89a7c9dc5f2ddd0d315b1249c88266cb8002ee01/src/credentials-manager/index.js#L134 并且它引用了来自本机的 A0Auth0 对象。

如果您使用的是 Android,您可以在 Android Studio 中放置一个断点并检查本机实现中发生的情况 https://github.com/auth0/react-native-auth0/blob/89a7c9dc5f2ddd0d315b1249c88266cb8002ee01/android/src/main/java/com/auth0/react/A0Auth0Module.java 特别是 SecureCredentialsManager

可能您忘记配置特定于平台的某些内容 https://github.com/auth0/react-native-auth0#configure-the-sdk

Kirill Novikov
2022-11-05

本质上 - react-native-auth0 是本机代码,与 expo go 不兼容

我发布此答案是因为要运行本机代码,您需要开发构建,而 expo 正在指导人们使用 eas 来创建这些代码。但是 eas 的等待时间可能超过一个小时,并且您只能在其服务器中存储有限数量的构建。话虽如此,prebuild 命令将允许您缩短等待时间,并且只需几个额外的步骤。

有关 Prebuild 的更多信息

如果您运行 npx create-react-native-app,则可能必须以不同于使用 npx create-expo-app 构建的方式配置本机代码。据我所知,这两个脚本生成的 gradle 文件略有不同。我的解决方案最终使用了 npx create-expo-app 命令。

在更新 app.json 上的代码(参见原始帖子)以包含插件部分后,我执行以下操作

  1. 我运行了 npx expo prebuild --platform android
  2. 我将 apk 从 ./android/app/build/outputs/apk/debug 复制到 dropbox/google drive 等
  3. 我下载并安装 apk 到物理设备上
  4. 使用 expo-go 扫描条形码

它呈现并正常工作。

Lauro235
2023-03-07