2017-08-07 15 views
0

私はAndroidアプリでRealm databaseを使用しています。データを暗号化する必要があり、Realmの暗号化を使用しています。これらのキーはサーバーから送信され、デバイスに保存されますが、ユーザーPINを使用して暗号化されています。Realmの間違った暗号化キーでユーザーをログアウトします

私はいつでもユーザーをログアウトしたいと思います。私は

  • をいくつかの一般的な初期化のためParentActivityクラスを使用して、以下のようにonCreateの内側にそれを実行しようとしました、

    private void initRealm() { 
        try { 
         if(MyApplication.getInstance().isRelamInitialized) 
          realm = Realm.getDefaultInstance(); 
        } catch (IllegalStateException e) { 
         e.printStackTrace(); 
         deleteAllAndLogout(); 
        } 
    
    } 
    

    そしてdeleteAllAndLogout

    public void deleteAllAndLogout() { 
        session.logoutUser(); 
        session.removeFbData(); 
        RealmManager.deleteAll(realm); 
        LoginManager.getInstance().logOut(); 
        Intent intent = new Intent(this, LoginActivity.class); 
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
        startActivity(intent); 
        finish(); 
    } 
    

    、以下のように見える問題ていますRealmがまだ初期化されていない場合、どのようにデータを消去するのですか?あなたはrealmが初期化されていますか?

  • 私はそれをテストしたが、それは何度も何度もやり続けていた。

私はApplicationクラスでRealmを初期化しています。

public void initRealm() { 
    String encryptedKey = new Session(getApplicationContext()).getStringForKey(Session.mainEncryptedKeyForEncryption); 
    String key = new Cipher(getApplicationContext()).decrypt(encryptedKey); 

    Realm.init(getApplicationContext()); 
    config = new RealmConfiguration 
      .Builder() 
      .encryptionKey(key.getBytes()) 
      .deleteRealmIfMigrationNeeded() 
      .name(DB_NAME) 
      .schemaVersion(DB_VERSION) 
      .build(); 

    Realm.setDefaultConfiguration(config); 
    isRelamInitialized = true; 

} 

質問

方法とRealmが正しく復号化されていない場合、私はすべてのローカルデータとログアウトユーザーを削除することができますか?

答えて

0

誤った暗号化キーでRealmファイルを開こうとすると、RealmはRealmFileExceptionをスローします。

したがって、すべての呼び出しをRealm.getDefaultInstance()にラップする必要があります。例外が発生した場合は、例外をキャッチしてユーザーをログアウトしてください。

関連する問題