代码之家  ›  专栏  ›  技术社区  ›  Sahar Toledano

在react本机密钥链中使用getAllGenericPasswordServices时出现问题

  •  0
  • Sahar Toledano  · 技术社区  · 1 年前

    我正在尝试使用react原生密钥链api,但在getAllGenericPasswordServices()方面遇到了一些问题

    我想检索我在typeof数组中存储在密钥链中的所有密码名称,这样我就可以向客户端显示他所有密钥链名称的列表。但不幸的是,响应的类型是Object:(。是否可以检索数组?

    import * as Keychain from 'react-native-keychain';
    
    export const getAllProperties = async () => {
      try {
        const allProperties = await Keychain.getAllGenericPasswordServices();
        if (allProperties) {
          console.log(
            'add new code utils - getAllProperties - ' +
              allProperties +
              typeof allProperties,
          );
        } else {
          console.log('No credentials stored');
        }
      } catch (error) {
        console.log("Keychain couldn't be accessed!", error);
      }
    };
    

    以及另一个问题;) 我正在使用android studio模拟器测试这个库,我似乎不那么安全,我的意思是我可以在没有任何faceId、代码或指纹请求的情况下检索数据。。是因为模拟器,还是我应该在代码中启用它?

    0 回复  |  直到 1 年前
        1
  •  0
  •   Thanhal P A    1 年前

    关于第一个问题,响应的类型显示为Object,因为在javascript中,所有派生的数据类型都是类型对象。包含函数和数组。

    如果你需要检查它是否是一个数组,你可以使用array的isArray方法

    Array.isArray(allProperties)
    

    关于您的第二个问题,在API的官方文档中 getAllGenericPasswordServices() 在里面 react-native-keychain 他们说在iOS上 getAllGenericPasswordServices() 将实际读取加密的条目,因此如果您使用密码/生物计量加密了任何条目,它将触发身份验证UI。

    因此,我们可以假设,在安卓系统中,钥匙链的安全性与安卓操作系统强制执行的安全措施有关,例如设备锁定屏幕密码/生物测量。

    而模拟器环境可能无法提供与具有适当安全措施的物理设备相同的安全级别。因此,在真实设备上测试代码以确保执行适当的安全措施并保护密钥链条目是很重要的。

    推荐文章