【问题标题】:ReferenceError: Can't find variable: crypto in React NativeReferenceError:找不到变量:React Native 中的加密
【发布时间】:2022-01-07 19:33:54
【问题描述】:

我在我的 react 本机应用程序中使用了一些身份验证节点模块,它使用 jose 作为依赖项。我收到以下错误,我认为这是由于 React native 不支持 in-build typescript/ node 库

错误参考错误:找不到变量:加密错误
不变违规:模块 AppRegistry 不是注册的可调用对象 模块(调用runApplication)

即使在我的应用中使用 node-libs-react-nativern-nodify 也无法解决问题。似乎将解析器添加到 metro.config.js 以提供额外的节点模块并不能解决依赖项使用的库的问题(这里 jose 由 auth 库使用,而 jose 正在使用加密)。

有什么解决方案或变通方法可以让它发挥作用吗?

我发现了 2 个类似的问题,但没有提到对我有用

  1. Requiring unknown module "crypto" in react-native environment
  2. Unable to resolve module crypto in reactnative

【问题讨论】:

  • 您使用的是什么身份验证节点模块? Jose有浏览器版本,可以使用const * as Jose = require('jose/dist/browser')访问
  • @MedetTleukabiluly 我已经从jose/dist/browser 导入,但问题是在反应原生环境中没有加密。
  • 来自 jose 浏览器运行时的 crypto 不是 Node 的加密。它是 Web 密码学 API。 react native 中缺少许多 Web API,而不仅仅是 webcrypto。不过,如果您设法填充所有这些全局变量,它可能会起作用。但请注意,您将依赖于运行时并非原生的加密层。 D'oh,因为 react-native 没有。就像我回答 here 一样,我没有计划支持这个 javascript 运行时 - 它不是 Web API 运行时。它充满了polyfills。远离。
  • @FilipSkokan Auth 库已经填充了,我之前使用的是 jose 3.x 版本,它可以在 react native 中工作而不会引发此错误。但是请注意 parseJwk 函数中的一些错误,它没有返回承诺。更新到 4.x 后,该问题得到解决(在 node.js 和 web 中解决)并最终导致上述反应原生错误

标签: react-native cryptojs jose


【解决方案1】:

我能够使用jsrsasign 库来获得在 React 本机环境中实现的功能。这是一个用纯 javascript 编写的库,提供了许多与加密相关的功能。

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多