打开 关闭

Encrypted Setting Default Value #5911


User avatar
0
douglasmolon@gmail.com 创建

Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, and please first use the search on the homepage. Provide us with the following info:

  • ABP Framework version: v7.3.3
  • UI Type: Angular
  • Database System: EF Core (SQL Server)
  • Tiered (for MVC) or Auth Server Separated (for Angular): yes
  • Exception message and full stack trace: below
  • Steps to reproduce the issue: below

Hello! We are using the ABP settings provider, but we are having difficulty setting a default value for a encrypted setting. We can set the default value, but it cannot be read after. I guess it's because ABP is trying to decrypt a value that is not encrypted yet. Is there a way to set a default value to an encrypted setting?

Thanks.


4 答案
  • User Avatar
    0
    maliming 创建
    支持团队 Fullstack Developer

    hi

    We can set the default value

    Please share your code. Usually, you don't need to care about the encryption, which is done automatically.

    https://docs.abp.io/en/abp/latest/Settings#isettingencryptionservice

  • User Avatar
    0
    douglasmolon@gmail.com 创建

    hi

    We can set the default value

    Please share your code.Usually, you don't need to care about the encryption, which is done automatically.

    https://docs.abp.io/en/abp/latest/Settings#isettingencryptionservice

     public override void Define(ISettingDefinitionContext context)
        {
            context.Add(new SettingDefinition(ProductServiceSettings.DataShareApiUrl, "http://192.168.15.3:5150", isEncrypted: false));
            context.Add(new SettingDefinition(ProductServiceSettings.DataSharePublicKey, "015e5387-05d4-4904-9d1a-b7a6c4241bd6", isEncrypted: false));
            context.Add(new SettingDefinition(ProductServiceSettings.DataShareSecretKey, "11ddf380-c141-4889-b5ee-dcdd72c0b8d0", isEncrypted: true));
            context.Add(new SettingDefinition(ProductServiceSettings.SchedulerUsername, "scheduler_user"));
            context.Add(new SettingDefinition(ProductServiceSettings.SchedulerPassword, "123456", isEncrypted: true));
           // and so on...
        }
    

    Please note that settings that are not encrypted we can get default values using ISettingProvider normally, like this example: var urlHeader = $"{(await settingProvider.GetOrNullAsync(ProductServiceSettings.DataShareApiUrl)).EnsureEndsWith('/')}{url}";

    But encrypted ones returns null. like this one: await settingProvider.GetOrNullAsync(ProductServiceSettings.DataShareSecretKey)

  • User Avatar
    0
    maliming 创建
    支持团队 Fullstack Developer

    hi

    Can you try to inject the ISettingEncryptionService and Encrypt your default value?

  • User Avatar
    0
    douglasmolon@gmail.com 创建

    hi

    Can you try to inject the ISettingEncryptionService and Encrypt your default value?

    I tested it with IStringEncryptionService directly and it worked!

    The ISettingEncryptionService Encrypt method needs a SettingDefinition type parameter but doesn't really use it. Maybe this was unintentional.

    Thank you!

Made with ❤️ on ABP v8.2.0-preview Updated on 三月 25, 2024, 15:11