Thank you maliming!
The sorting is fixed.
Yea I guess the OnCreateForm.IsVisible is a blazor problem on your side because options.UI.OnTable.IsVisible = true; is working as expected.
Hi, thanks for the response. The extended fields are already mapped as separate columns in AbpUsers, so they are not stored inside ExtraProperties/JSON. The sorting issue still occurs because ABP executes the dynamic OrderBy against IdentityUser, not against the extended entity, so the column cannot be resolved.
Also, my second question is still unanswered: The UI configuration OnCreateForm.IsVisible = false is ignored. The field still appears in the create dialog. Is there a known workaround or a correct place to apply UI visibility settings for IdentityUser extensions so they are respected?
Thanks.
Edit: This is how I did it: https://abp.io/docs/latest/framework/architecture/modularity/extending/module-entity-extensions#module-entity-extensions Error Log Sorting: 2025-11-27 08:24:45.745 +01:00 [ERR] No property or field 'MyProperty' exists in type 'IdentityUser' No property or field 'MyProperty' exists in type 'IdentityUser' (at index 0)
This is my config like the AI-Bot said
ObjectExtensionManager.Instance
.MapEfCoreProperty<IdentityUser, string?>(
MyConsts.MyProperty,
(_, propertyBuilder) =>
{
propertyBuilder.IsRequired(false);
})
Hello, I extended dbo.AbpUsers / IdentityUser with two additional properties following this ABP tutorial: https://abp.io/community/articles/identityuser-relationship-and-extending-it-xtv79mpx#gsc.tab=0 The database and entities were extended successfully. However, I am seeing two issues:
1) Grid sorting error When I click on the column header for the custom property (e.g. MyField) in the user grid, the backend throws an exception:
No property or field 'MyField' exists in type 'IdentityUser'
No property or field 'MyField' exists in type 'IdentityUser' (at index 0)
at System.Linq.Dynamic.Core.Parser.ExpressionParser.ParseMemberAccess(Type type, Expression expression, String id)
...
at Volo.Abp.Identity.EntityFrameworkCore.EfCoreIdentityUserRepository.GetListAsync(String sorting, Int32 maxResultCount, Int32 skipCount, String filter, Boolean includeDetails, Nullable1 roleId, Nullable1 organizationUnitId, String userName, String phoneNumber, String emailAddress, String name, String surname, Nullable1 isLockedOut, Nullable1 notActive, Nullable1 emailConfirmed, Nullable1 isExternal, Nullable1 maxCreationTime, Nullable1 minCreationTime, Nullable1 maxModifitionTime, Nullable1 minModifitionTime, CancellationToken cancellationToken)
It looks like the dynamic sorting (OrderBy) is executed against IdentityUser and not against the extended type / object extension, so the property cannot be found.
2) UI visibility for create form is ignored For one of the custom properties I tried to hide it on the create form and only show it in the table. I configured the extension like this:
ObjectExtensionManager.Instance.Modules().ConfigureIdentity(identity =>
{
identity.ConfigureUser(user =>
{
user.AddOrUpdateProperty<Guid?>(
MyConsts.MyPropertyName,
options =>
{
options.DefaultValue = null;
options.UI.OnTable.IsVisible = true;
options.UI.OnCreateForm.IsVisible = false;
}
);
});
});
If there is a preferred approach to enable sorting for extended IdentityUser properties and to manage their visibility on the create form, I would appreciate any guidance or documentation updates.
Thank you maliming!
Thank you! And what is the proper way to handle this in a normal login with username and password?
Hello, we are using Azure OpenIdConnect for authentication, which works fine so far. The problem: if a user does not exist in a specific table in our database, their authentication state should be invalid. How can we achieve that the authentication flow, after a successful Azure OpenIdConnect login, additionally checks the database and rejects the user if not found? Is maybe the AbpClaimsPrincipalContributor a way to interupt it and check if the user is found?
Thank you for your help!
When I navigate between different pages using the sidebar, the cookie seems to be ignored. However, when I refresh the page in the browser, the cookie is correctly validated, and I am logged out. Is there a simple way to always check the cookie, even when navigating via the sidebar?
Feature did work but some documentation was missing. GitHub Issue: https://github.com/abpframework/abp/issues/22970
Hello, I would like to know the concrete steps for implementing a session timeout using Azure AD in ABP. Because once we are logged in there is no timeout when the user has to log in again. Specifically, I want the user session to expire after 24 hours. We are not using app.UseDynamicClaims(); Thanks in advance!
This code is in my blazor module in the method PreConfigureServices:
if (!hostingEnvironment.IsDevelopment)
{
PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
{
options.AddDevelopmentEncryptionAndSigningCertificate = false;
});
PreConfigure<OpenIddictServerBuilder>(serverBuilder =>
{
serverBuilder.AddProductionEncryptionAndSigningCertificate("openiddict.pfx", "...");
});
}
Configure auth method
var authenticationBuilder = context.Services.AddAuthentication();
authenticationBuilder.AddOpenIdConnect(
authenticationScheme: "AzureOpenId",
displayName: "...",
configureOptions: options =>
{
options.Authority = $"https://login.microsoftonline.com/{azTenantId}/v2.0/";
options.ClientId = "MyEntraId";
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.CallbackPath = "MyCallBack";
options.ClientSecret = "MySecreat";
options.RequireHttpsMetadata = false;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "sub");
});
The scripts which are added are the following:
<script src="/_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/abp.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web/libs/abp/js/authentication-state-listener.js"> </script><script src="/_content/Volo.Abp.Account.Pro.Public.Blazor.Shared/IdleTracker.js"></script> <script src="/_content/Volo.Saas.Host.Blazor/libs/chart/chart.min.js"></script> <script src="/_content/Volo.Abp.AuditLogging.Blazor/libs/chart/chart.min.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web.LeptonXTheme/side-menu/libs/bootstrap/js/bootstrap.bundle.min.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web.LeptonXTheme/side-menu/libs/jquery/jquery.min.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web.LeptonXTheme/side-menu/libs/bootstrap-datepicker/js/bootstrap-datepicker.min.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web.LeptonXTheme/side-menu/js/lepton-x.bundle.min.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Server.LeptonXTheme/scripts/leptonx-blazor-compatibility.js"></script> <script src="/_content/Volo.Abp.AspNetCore.Components.Web.LeptonXTheme/scripts/global.js"></Scrip> <script src="_framework/blazor.web.js"></script> <script src="/_framework/aspnetcore-browser-refresh.js"></script></body></html><
So there might be the /Idle/Default.js missing.
What is the easiest way to check if persistent login is enabled?