[RN-Android]:react-native-keychain - 存储来自应用程序 A 的凭据后无法从应用程序 B 检索凭据

问题描述 投票:0回答:1

以下是问题的细分:

第 1 步:存储来自应用程序 A 的凭据:

我在 React Native 应用程序(我们称之为应用程序 A)中使用

react-native-keychain
成功存储了凭据(例如用户名和密码)。

第 2 步:尝试从应用程序 B 检索凭据:

将凭据存储在应用程序 A 中后,我尝试从另一个应用程序(我们称之为应用程序 B)检索它们。但是,我在使用

react-native-keychain
检索凭据时遇到了困难。

参考代码-

  const storeData = async () => {
    const result = await Keychain.setGenericPassword(
      'credentials',
      '[email protected]|test123',
      {
        service: 'com.demo.cred',
      },
    );
    console.log('🚀 ~ storeCredentials ~ result:', result);
  };

  const getData = async () => {
    const credentials = await Keychain.getGenericPassword({
      service: 'com.demo.cred',
    });
    console.log('🚀 ~ retrieveCredentials ~ credentials:', credentials);
  };

  const resetData = async () => {
    const result = await Keychain.resetGenericPassword({
      service: 'com.demo.cred',
    });
    console.log('🚀 ~ resetCredentials ~ result:', result);
  };

注意:从应用程序 A 存储后,我能够从应用程序 A 检索凭据,但无法从应用程序 B 检索凭据。尽管此流程适用于 iOS。

设置问题 -

根据手动链接的文档https://www.npmjs.com/package/react-native-keychain#option-manually-1,我面临以下步骤的问题。

  • 编辑 MainApplication.java(位于 android/app/src/main/java/... 深处),如下所示(注意要编辑的两个位置):
package com.myapp;

+ import com.oblador.keychain.KeychainPackage;

....

public class MainActivity extends extends ReactActivity {

  @Override
  protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
+             new KeychainPackage()
      );
  }
  ...
}
  • 这是我的
    MainApplication.java
....
import com.oblador.keychain.KeychainPackage; // --> added import here

....

public class MainApplication extends Application implements ReactApplication, DefaultLifecycleObserver {
    static Context activityContext;
    private final ReactNativeHost mReactNativeHost =
            new DefaultReactNativeHost(this) {
                @Override
                public boolean getUseDeveloperSupport() {
                    return BuildConfig.DEBUG;
                }

                @Override
                protected List<ReactPackage> getPackages() {
                    @SuppressWarnings("UnnecessaryLocalVariable")
                    List<ReactPackage> packages = new PackageList(this).getPackages();
                    // Packages that cannot be autolinked yet can be added manually here, for example:
                    // packages.add(new MyReactNativePackage());
                    packages.add(new com.ekk.motorcity.MyAppPackage());
                    packages.add(new KeychainPackage()); // --> added package here
                    return packages;
                }
....

我尝试在我的应用程序中添加类似的内容,但出现错误

Native module RNKeychainManager tried to override KeychainModule. Check the getPackages() method in MainApplication.java, it might be that module is being created twice. If this was your intention, set canOverrideExistingModule=true. This error may also be present if the package is present only once in getPackages () but is also automatically added later during build time by autolinking. Try removing the existing entry and rebuild.

附上错误截图以供参考错误 - RNKeychainManager

社区针对此问题提供的任何建议或修复,以及任何见解或指导,我们将不胜感激。 谢谢!

尝试过 - 自动链接,诸如 

react-native-keychain

Keychain.SECURITY_LEVEL
 之类的选项
    

react-native keychain react-native-keychain
1个回答
0
投票
文档

Xcode 配置

您需要启用钥匙串共享功能(对第一个项目执行此操作)
  1. 使用反向 DNS 表示法输入钥匙串组的名称,例如com.project.test
  2. 转到第二个项目并启用钥匙串共享功能
  3. 选择与第一个项目相同的钥匙串组
注意事项

:您需要在两个应用程序上拥有相同的开发者证书。 反应本机钥匙串

在两个应用程序中使用相同的服务密钥进行存储和检索。

© www.soinside.com 2019 - 2024. All rights reserved.