Activities of "liangshiwei"

It has been configured, you can remove unnecessary files and then package using the command

Yes, you can remove unnecessary files and repackage using webpack

Hi,

Are you talking about ABP Suite?

Tenant management does not appear in the admin user, although we have authorization in the angular management tab

The tenant management is under the Saas menu, you can change the menu order if you want.

When we add a tenant from the SaaS section, it assigns a record to the SaasTenants table, but we cannot enter the administration panel with this customer. When we manually add a record to the AbpTenants table, we can log in with the relevant customer user. But we also had an authorization problem.

Sorry, I'm a little confused, There should be only one SaasTenants database table here, not AbpTenants

especially as the MVC LeptonX implementation doesn't have this issue and can switch its .css between light.css, dark.css, dim.css as required when the theme styles are selected, without any javascript being used to dynamically perform this task?

Because MVC UI refreshes the page every time, it doesn't need it.

In any case, can we please have an update on if this bug is any closer to being fixed?

This is the design and we will not change it at this time, we may consider implementing the Skeleton Loading States: https://styleguide.handy.com/native/skeleton-loading-states

Hi,

You can download the leptonx theme source code to re-pack the Leptonx.bundle.min.js

Hi,

When you log in successfully, it will set accesstoken and refreshtoken.

public class LoginService : ILoginService, ITransientDependency
{
    private readonly OidcClient _oidcClient;
    private readonly IStorage _storage;
    private readonly MauiCachedApplicationConfigurationClient _applicationConfigurationClient;

    public LoginService(OidcClient oidcClient, IStorage storage, MauiCachedApplicationConfigurationClient applicationConfigurationClient)
    {
        _oidcClient = oidcClient;
        _storage = storage;
        _applicationConfigurationClient = applicationConfigurationClient;
    }

    public async Task<LoginResult> LoginAsync()
    {
        var loginResult = await _oidcClient.LoginAsync(new LoginRequest());

        if (!loginResult.IsError)
        {
            await SetTokenCacheAsync(loginResult.AccessToken, loginResult.RefreshToken);
            await _applicationConfigurationClient.InitializeAsync();

            WeakReferenceMessenger.Default.Send(new LoginMessage());
        }

        return loginResult;
    }

    public async Task<LogoutResult> LogoutAsync()
    {
        var logoutResult = await _oidcClient.LogoutAsync();
        if (!logoutResult.IsError)
        {
            await ClearTokenCacheAsync();
            await _applicationConfigurationClient.InitializeAsync();

            WeakReferenceMessenger.Default.Send(new LogoutMessage());
        }

        return logoutResult;
    }

    public async Task<string> GetAccessTokenAsync()
    {
        var token = await _storage.GetAsync(MyProjectNameConsts.OidcConsts.AccessTokenKeyName);

        if (!token.IsNullOrEmpty())
        {
            var jwtToken = new JwtSecurityTokenHandler().ReadJwtToken(token);
            if (jwtToken.ValidTo <= DateTime.UtcNow)
            {
                var newToken = await TryRefreshTokenAsync();

                if (!newToken.IsNullOrEmpty())
                {
                    return newToken;
                }

                await ClearTokenCacheAsync();
                WeakReferenceMessenger.Default.Send(new LogoutMessage());
            }
        }

        return token;
    }

    public async Task<string> TryRefreshTokenAsync()
    {
        var refreshToken = await _storage.GetAsync(MyProjectNameConsts.OidcConsts.RefreshTokenKeyName);
        if (!refreshToken.IsNullOrEmpty())
        {
            var refreshResult = await _oidcClient.RefreshTokenAsync(refreshToken);
            await SetTokenCacheAsync(refreshResult.AccessToken, refreshResult.RefreshToken);

            return refreshResult.AccessToken;
        }

        return string.Empty;
    }

    private async Task SetTokenCacheAsync(string accessToken, string refreshToken)
    {
        await _storage.SetAsync(MyProjectNameConsts.OidcConsts.AccessTokenKeyName, accessToken);
        await _storage.SetAsync(MyProjectNameConsts.OidcConsts.RefreshTokenKeyName, refreshToken);
    }

    private async Task ClearTokenCacheAsync()
    {
        await _storage.RemoveAsync(MyProjectNameConsts.OidcConsts.AccessTokenKeyName);
        await _storage.RemoveAsync(MyProjectNameConsts.OidcConsts.RefreshTokenKeyName);
    }
}
Answer

Sure, Can you share how you solved this problem, it might help others

sure

Hi,

Sorry, I didn't get it.

The Leptonx.bundle.min.js is not a bundle package. It is a separate js file. you have to replace or delete it entirely

Showing 2821 to 2830 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 12, 2025, 10:20