可能未处理的承诺拒绝(id:0):TypeError:null不是对象
我收到以下错误..
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"
}
]
]
}
}
这是一张包含更多信息的图片:
始终从库的源代码开始,例如,您的错误发生在这里:
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
本质上 - react-native-auth0 是本机代码,与 expo go 不兼容
我发布此答案是因为要运行本机代码,您需要开发构建,而 expo 正在指导人们使用 eas 来创建这些代码。但是 eas 的等待时间可能超过一个小时,并且您只能在其服务器中存储有限数量的构建。话虽如此,prebuild 命令将允许您缩短等待时间,并且只需几个额外的步骤。
如果您运行 npx create-react-native-app,则可能必须以不同于使用
npx create-expo-app
构建的方式配置本机代码。据我所知,这两个脚本生成的 gradle 文件略有不同。我的解决方案最终使用了
npx create-expo-app
命令。
在更新 app.json 上的代码(参见原始帖子)以包含插件部分后,我执行以下操作
-
我运行了
npx expo prebuild --platform android
- 我将 apk 从 ./android/app/build/outputs/apk/debug 复制到 dropbox/google drive 等
- 我下载并安装 apk 到物理设备上
- 使用 expo-go 扫描条形码
它呈现并正常工作。