Activities of "liangshiwei"

You may need to configure your web server. Can you explain how your project is deployed?

Hi,

Okay ,you can leave your reply anytime

Hi

There is no need to keep this question open, I will leave a message here after it is finished

Hi,

You can try this https://abp.io/support/questions/8921/External-provider-setting-exception#answer-3a18961c-cf88-a4c1-8640-488ae6d6889a

Your ticket was refunded.

Hi,

We may release a patch version next week

Hi,

I can reproduce the problem.

Try this

[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ExternalProviderSettingsHelper))]
public class MyExternalProviderSettingsHelper : ExternalProviderSettingsHelper
{
    private readonly ISettingDefinitionManager _settingDefinitionManager;
    private readonly ISettingEncryptionService _settingEncryptionService;
    private readonly ICurrentTenant _currentTenant;
    private readonly AbpExternalProviderOptions _externalProviderOptions;
    private readonly ISettingManager _settingManager;
    private readonly IJsonSerializer _jsonSerializer;
    public MyExternalProviderSettingsHelper(
        ICurrentTenant currentTenant, 
        IOptions<AbpExternalProviderOptions> externalProvidersOptions,
        ISettingManager settingManager,
        IJsonSerializer jsonSerializer,
        IStringEncryptionService stringEncryptionService,
        ISettingDefinitionManager settingDefinitionManager,
        ISettingEncryptionService settingEncryptionService) 
           : base(currentTenant, externalProvidersOptions, settingManager, jsonSerializer, stringEncryptionService)
    {
        _settingDefinitionManager = settingDefinitionManager;
        _settingEncryptionService = settingEncryptionService;
        _currentTenant = currentTenant;
        _externalProviderOptions = externalProvidersOptions.Value;
        _settingManager = settingManager;
        _jsonSerializer = jsonSerializer;
    }

    protected override async Task<ExternalProviderSettings> GetSettingsAsync(ExternalProviderDefinition definition, string providerName, string providerKey)
    {
        var settings = await base.GetSettingsAsync(definition, providerName, providerKey);

         var settingDefinition = await _settingDefinitionManager.GetAsync(AccountSettingNames.ExternalProviders);
        foreach (var secretProperty in settings.SecretProperties)
        {
            secretProperty.Value = _settingEncryptionService.Decrypt(settingDefinition, secretProperty.Value);
        }

        return settings;
    }

    public override async Task<List<ExternalProviderSettings>> GetAllAsync()
    {
        var allSettings = new List<ExternalProviderSettings>();

        List<ExternalProviderSettings> hostSettingsList;
        using (_currentTenant.Change(null))
        {
            hostSettingsList = await GetSettingsListOrNullAsync(GlobalSettingValueProvider.ProviderName, null);
        }

        var settingsList = _currentTenant.IsAvailable
            ? await GetSettingsListOrNullAsync(TenantSettingValueProvider.ProviderName, _currentTenant.Id?.ToString())
            : hostSettingsList;

        foreach (var externalProviderDefinition in _externalProviderOptions.Definitions)
        {
            var newSettings = CreateSettings(externalProviderDefinition);
            var existSettings = settingsList?.FirstOrDefault(x => x.Name == externalProviderDefinition.Name);
            if (existSettings != null)
            {
                CloneSettings(existSettings, newSettings);
            }

            if (_currentTenant.IsAvailable)
            {
                newSettings.Enabled = hostSettingsList?.FirstOrDefault(x => x.Name == externalProviderDefinition.Name)?.Enabled
                                      ?? false;
            }

            allSettings.Add(newSettings);
        }

        var settingDefinition = await _settingDefinitionManager.GetAsync(AccountSettingNames.ExternalProviders);
        foreach (var secretProperty in allSettings.SelectMany(setting => setting.SecretProperties))
        {
            secretProperty.Value = _settingEncryptionService.Decrypt(settingDefinition, secretProperty.Value);
        }

        return allSettings;
    }

    public async override Task SetAsync(ExternalProviderSettings settings)
    {
        var definition = _externalProviderOptions.Definitions.FirstOrDefault(x => x.Name == settings.Name);
        if (definition == null)
        {
            throw new Exception($"External provider with {settings.Name} not definition!");
        }

        var newSettings = CreateSettings(definition);

        CloneSettings(settings, newSettings);

        if (_currentTenant.IsAvailable)
        {
            newSettings.Enabled = true;
        }

        var existSettingsList = (_currentTenant.IsAvailable
            ? await GetSettingsListOrNullAsync(TenantSettingValueProvider.ProviderName, _currentTenant.Id?.ToString())
            : await GetSettingsListOrNullAsync(GlobalSettingValueProvider.ProviderName, null)) ?? new List<ExternalProviderSettings>();

        existSettingsList.RemoveAll(x => x.Name == definition.Name);
        existSettingsList.Add(newSettings);
        
        var settingDefinition = await _settingDefinitionManager.GetAsync(AccountSettingNames.ExternalProviders);
        foreach (var secretProperty in newSettings.SecretProperties)
        {
            secretProperty.Value = _settingEncryptionService.Encrypt(settingDefinition, secretProperty.Value);
        }

        if (_currentTenant.IsAvailable)
        {
            await _settingManager.SetForCurrentTenantAsync(AccountSettingNames.ExternalProviders, _jsonSerializer.Serialize(existSettingsList));
        }
        else
        {
            await _settingManager.SetGlobalAsync(AccountSettingNames.ExternalProviders, _jsonSerializer.Serialize(existSettingsList));
        }
    }
}

Hi

What is the error message, could you share the full logs? thanks

Hi,

We will fix the problem in the next patch version. and your ticket was refunded.

you can try this as a temporary solution

[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(ExternalProviderSettingsHelper))]
public class MyExternalProviderSettingsHelper : ExternalProviderSettingsHelper
{
    private readonly ISettingDefinitionManager _settingDefinitionManager;
    private readonly ISettingEncryptionService _settingEncryptionService;
    private readonly ICurrentTenant _currentTenant;
    private readonly AbpExternalProviderOptions _externalProviderOptions;
    private readonly ISettingManager _settingManager;
    private readonly IJsonSerializer _jsonSerializer;
    public MyExternalProviderSettingsHelper(
        ICurrentTenant currentTenant, 
        IOptions<AbpExternalProviderOptions> externalProvidersOptions,
        ISettingManager settingManager,
        IJsonSerializer jsonSerializer,
        IStringEncryptionService stringEncryptionService,
        ISettingDefinitionManager settingDefinitionManager,
        ISettingEncryptionService settingEncryptionService) 
           : base(currentTenant, externalProvidersOptions, settingManager, jsonSerializer, stringEncryptionService)
    {
        _settingDefinitionManager = settingDefinitionManager;
        _settingEncryptionService = settingEncryptionService;
        _currentTenant = currentTenant;
        _externalProviderOptions = externalProvidersOptions.Value;
        _settingManager = settingManager;
        _jsonSerializer = jsonSerializer;
    }

    public override async Task<List<ExternalProviderSettings>> GetAllAsync()
    {
        var allSettings = new List<ExternalProviderSettings>();

        List<ExternalProviderSettings> hostSettingsList;
        using (_currentTenant.Change(null))
        {
            hostSettingsList = await GetSettingsListOrNullAsync(GlobalSettingValueProvider.ProviderName, null);
        }

        var settingsList = _currentTenant.IsAvailable
            ? await GetSettingsListOrNullAsync(TenantSettingValueProvider.ProviderName, _currentTenant.Id?.ToString())
            : hostSettingsList;

        foreach (var externalProviderDefinition in _externalProviderOptions.Definitions)
        {
            var newSettings = CreateSettings(externalProviderDefinition);
            var existSettings = settingsList?.FirstOrDefault(x => x.Name == externalProviderDefinition.Name);
            if (existSettings != null)
            {
                CloneSettings(existSettings, newSettings);
            }

            if (_currentTenant.IsAvailable)
            {
                newSettings.Enabled = hostSettingsList?.FirstOrDefault(x => x.Name == externalProviderDefinition.Name)?.Enabled
                                      ?? false;
            }

            allSettings.Add(newSettings);
        }

        var settingDefinition = await _settingDefinitionManager.GetAsync(AccountSettingNames.ExternalProviders);
        foreach (var secretProperty in allSettings.SelectMany(setting => setting.SecretProperties))
        {
            secretProperty.Value = _settingEncryptionService.Decrypt(settingDefinition, secretProperty.Value);
        }

        return allSettings;
    }

    public async override Task SetAsync(ExternalProviderSettings settings)
    {
        var definition = _externalProviderOptions.Definitions.FirstOrDefault(x => x.Name == settings.Name);
        if (definition == null)
        {
            throw new Exception($"External provider with {settings.Name} not definition!");
        }

        var newSettings = CreateSettings(definition);

        CloneSettings(settings, newSettings);

        if (_currentTenant.IsAvailable)
        {
            newSettings.Enabled = true;
        }

        var existSettingsList = (_currentTenant.IsAvailable
            ? await GetSettingsListOrNullAsync(TenantSettingValueProvider.ProviderName, _currentTenant.Id?.ToString())
            : await GetSettingsListOrNullAsync(GlobalSettingValueProvider.ProviderName, null)) ?? new List<ExternalProviderSettings>();

        existSettingsList.RemoveAll(x => x.Name == definition.Name);
        existSettingsList.Add(newSettings);
        
        var settingDefinition = await _settingDefinitionManager.GetAsync(AccountSettingNames.ExternalProviders);
        foreach (var secretProperty in newSettings.SecretProperties)
        {
            secretProperty.Value = _settingEncryptionService.Encrypt(settingDefinition, secretProperty.Value);
        }

        if (_currentTenant.IsAvailable)
        {
            await _settingManager.SetForCurrentTenantAsync(AccountSettingNames.ExternalProviders, _jsonSerializer.Serialize(existSettingsList));
        }
        else
        {
            await _settingManager.SetGlobalAsync(AccountSettingNames.ExternalProviders, _jsonSerializer.Serialize(existSettingsList));
        }
    }
}

Open External provider setting exception

What is the error message, could you share the full logs?

I will check it and add to explanation README or delete it

Showing 101 to 110 of 6692 entries
Learn More, Pay Less
33% OFF
All Trainings!
Get Your Deal
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.0.0-preview. Updated on September 10, 2025, 06:30