Activities of "maliming"

hi

Can you share the response of https://localhost:44368/Abp/ApplicationConfigurationScript?

Or you can share a test project that can reproduce the problem.

Thanks.

hi

Main point, how can I register someone automatically based on the claims received from an external provider? Previously I just overrode CreateExternalUserAsync on LoginModel.

You can override the Task<IActionResult> OnGetAsync() method

if IsExternalLogin is true, then get user info by var externalLoginInfo = await SignInManager.GetExternalLoginInfoAsync();

Do your register logic in the OnGetAsync by copy code from OnPostAsync method.

hi

Please share the logs.txt of your backend app.

You can share it via https://wetransfer.com/

Thanks.

liming.ma@volosoft.com

hi

Please check the logs from the browser console and the app's logs.

hi

Have you configured your app to Forwarded headers? https://learn.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-8.0#fhmo

validationParameters.ValidIssuer will be set as request.Scheme + Uri.SchemeDelimiter + host + request.PathBase

You can add a middleware to output the HTTP request info to logs to see the request host.

hi

if I can have any way to manage the organize data in azure?

This is not the initial design of the FM module.

If I want to upload a file from coding, do we have any accessible method of file management module to create folder in file management module? So I can have track of all the documents uploaded from code in file management module.

You can inject the Domain or AppService services to upload and manage the file/folder.

https://docs.abp.io/en/commercial/latest/modules/file-management#domain-services https://docs.abp.io/en/commercial/latest/modules/file-management#application-services

hi

What's the value of ReturnUrl?

And does your URL exist in RedirectAllowedUrls?

{
  "App": {
    "RedirectAllowedUrls": "http://localhost:4200,https://localhost:44307"
  }
}

hi

Yes, You have to enable the Redis.

https://support.abp.io/QA/Questions/6533/Why-do-I-need-the-Redis-cache-for-the-public-website#answer-3a10363f-48d7-73fe-88fc-51114ebe105d

hi

I confirmed. You have to use Redis in tiered projects. otherwise, you may get some strange problems.

but you can try the code below:

host/TestApplicationNet8.Web.Host/MyMvcRemoteTenantStore.cs

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Options;
using Pages.Abp.MultiTenancy.ClientProxies;
using Volo.Abp.AspNetCore.Mvc.Client;
using Volo.Abp.Caching;
using Volo.Abp.DependencyInjection;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Threading;

namespace TestApplicationNet8;

[ExposeServices(typeof(ITenantStore))]
public class MyMvcRemoteTenantStore :  ITenantStore, ITransientDependency
{
    protected AbpTenantClientProxy TenantAppService { get; }
    protected IHttpContextAccessor HttpContextAccessor { get; }
    protected IDistributedCache<TenantConfigurationCacheItem> Cache { get; }
    protected AbpAspNetCoreMvcClientCacheOptions Options { get; }

    public MyMvcRemoteTenantStore(
        AbpTenantClientProxy tenantAppService,
        IHttpContextAccessor httpContextAccessor,
        IDistributedCache<TenantConfigurationCacheItem> cache,
        IOptions<AbpAspNetCoreMvcClientCacheOptions> options)
    {
        TenantAppService = tenantAppService;
        HttpContextAccessor = httpContextAccessor;
        Cache = cache;
        Options = options.Value;
    }

    public async Task<TenantConfiguration?> FindAsync(string normalizedName)
    {
        var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(normalizedName);
        var httpContext = HttpContextAccessor?.HttpContext;

        if (httpContext != null && httpContext.Items[cacheKey] is TenantConfigurationCacheItem tenantConfigurationInHttpContext)
        {
            return tenantConfigurationInHttpContext?.Value;
        }

        var tenantConfiguration = await Cache.GetAsync(cacheKey);
        if (tenantConfiguration?.Value == null)
        {
            var tenant = await TenantAppService.FindTenantByNameAsync(normalizedName);
            if (tenant.Success)
            {
                tenantConfiguration = new TenantConfigurationCacheItem(new TenantConfiguration(tenant.TenantId!.Value, tenant.NormalizedName!));
                await Cache.SetAsync(cacheKey, tenantConfiguration);
            }
        }

        if (httpContext != null)
        {
            httpContext.Items[cacheKey] = tenantConfiguration;
        }

        return tenantConfiguration?.Value;
    }

    public async Task<TenantConfiguration?> FindAsync(Guid id)
    {
        var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(id);
        var httpContext = HttpContextAccessor?.HttpContext;

        if (httpContext != null && httpContext.Items[cacheKey] is TenantConfigurationCacheItem tenantConfigurationInHttpContext)
        {
            return tenantConfigurationInHttpContext?.Value;
        }

        var tenantConfiguration = await Cache.GetAsync(cacheKey);
        if (tenantConfiguration?.Value == null)
        {
            var tenant = await TenantAppService.FindTenantByIdAsync(id);
            if (tenant.Success)
            {
                tenantConfiguration = new TenantConfigurationCacheItem(new TenantConfiguration(tenant.TenantId!.Value, tenant.NormalizedName!));
                await Cache.SetAsync(cacheKey, tenantConfiguration);
            }
        }

        if (httpContext != null)
        {
            httpContext.Items[cacheKey] = tenantConfiguration;
        }

        return tenantConfiguration?.Value;
    }

    public Task<IReadOnlyList<TenantConfiguration>> GetListAsync(bool includeDetails = false)
    {
        return Task.FromResult<IReadOnlyList<TenantConfiguration>>(Array.Empty<TenantConfiguration>());
    }

    public TenantConfiguration? Find(string normalizedName)
    {
        var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(normalizedName);
        var httpContext = HttpContextAccessor?.HttpContext;

        if (httpContext != null && httpContext.Items[cacheKey] is TenantConfigurationCacheItem tenantConfigurationInHttpContext)
        {
            return tenantConfigurationInHttpContext?.Value;
        }

        var tenantConfiguration = Cache.Get(cacheKey);
        if (tenantConfiguration?.Value == null)
        {
            var tenant = AsyncHelper.RunSync(async () => await TenantAppService.FindTenantByNameAsync(normalizedName));
            if (tenant.Success)
            {
                tenantConfiguration = new TenantConfigurationCacheItem(new TenantConfiguration(tenant.TenantId!.Value, tenant.NormalizedName!));
                Cache.Set(cacheKey, tenantConfiguration);
            }
        }

        if (httpContext != null)
        {
            httpContext.Items[cacheKey] = tenantConfiguration;
        }

        return tenantConfiguration?.Value;
    }

    public TenantConfiguration? Find(Guid id)
    {
        var cacheKey = TenantConfigurationCacheItem.CalculateCacheKey(id);
        var httpContext = HttpContextAccessor?.HttpContext;

        if (httpContext != null && httpContext.Items[cacheKey] is TenantConfigurationCacheItem tenantConfigurationInHttpContext)
        {
            return tenantConfigurationInHttpContext?.Value;
        }

        var tenantConfiguration = Cache.Get(cacheKey);
        if (tenantConfiguration?.Value == null)
        {
            var tenant = AsyncHelper.RunSync(async () => await TenantAppService.FindTenantByIdAsync(id));
            if (tenant.Success)
            {
                tenantConfiguration = new TenantConfigurationCacheItem(new TenantConfiguration(tenant.TenantId!.Value, tenant.NormalizedName!));
                Cache.Set(cacheKey, tenantConfiguration);
            }
        }

        if (httpContext != null)
        {
            httpContext.Items[cacheKey] = tenantConfiguration;
        }

        return tenantConfiguration?.Value;
    }
}

Yes. Azure is used store file. The FM module is used to store file/folder info.

Showing 4901 to 4910 of 11531 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.1.0-preview. Updated on December 17, 2025, 07:08
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.