ABP version: 10.5 Database: PostgreSQL / EF Core Authentication: OpenIddict password grant
After upgrading from ABP 8, concurrent /connect/token requests for the same user cause:
AbpDbConcurrencyException: The database operation was expected to affect 1 row, but affected 0 rows.
IdentityUser {Id: ...} Modified at IdentityUserStore.UpdateAsync(...)
In ABP 10.5, TokenController.SetSuccessResultAsync updates the login timestamp using:
user.SetLastSignInTime(DateTimeOffset.UtcNow); await UserManager.UpdateAsync(user);
Two concurrent logins load the same ConcurrencyStamp. The first update succeeds, while the second fails.
Should updating LastSignInTime cause a concurrency failure for an otherwise valid login?
Hi, we updated from ABP 8 to ABP 10. When regenerating proxies, we noticed that many fields that were required in C# are now generated as optional (nullable) in TypeScript.
Example:
public class AlertDto { public required string NodeName { get; set; } public required Guid Id { get; set; } public TriggeringEvent TriggeringEvent { get; set; } public List<string> Users { get; set; } = []; public bool ShowOneTime { get; set; } public required string Content { get; set; } public List<string> Tenants { get; set; } = []; public AlertsType AlertType { get; set; } public bool ReadConfirm { get; set; } public DateTime FromDate { get; set; } public List<string> Roles { get; set; } = []; public List<string> TriggeredApps { get; set; } = []; public DateTime ToDate { get; set; } public Frequency? Frequency { get; set; } public int? FrequencyInterval { get; set; } public FrequencyTimeUnit? FrequencyTimeUnit { get; set; } }
or
public class TrainingPathDetailDto { public Guid Id { get; set; } public string Name { get; set; } = string.Empty; public string? Description { get; set; } public TriggerType TriggerType { get; set; } public bool IsActive { get; set; } public int? TrainingPathCompletionDaysLimit { get; set; } public DateTime CreatedAt { get; set; } public Guid? RoleId { get; set; } public Guid? DutyId { get; set; } public List<TrainingPathItemDetailDto> CourseItems { get; set; } = new(); }
Is this behavior intentional? How can we fix it? Do we need to add [Required] to every field that should be required?
Check the docs before asking a question: https://abp.io/docs/latest
Check the samples to see the basic tasks: https://abp.io/docs/latest/samples
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:
🧐 Hint: If you are using the ABP Studio, you can see all the information about your solution from the configuration window, which opens when you right-click on the solution and click on the Solution Configuration button.
I would like to remove the "My Account" option from the sidebar popup menu. Could you please let me know if there is a way to do this?
Thank you
Check the docs before asking a question: https://abp.io/docs/latest
Check the samples to see the basic tasks: https://abp.io/docs/latest/samples
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:
🧐 Hint: If you are using the ABP Studio, you can see all the information about your solution from the configuration window, which opens when you right-click on the solution and click on the Solution Configuration button.
Since upgrading from 8.2.2 to 8.3.4 i get a lot of warning in console.
Debugging i found that the duplicate keys are in the menu on the left and in the sidebar on the right.
Is there a way to add a menu item in the toolbar on the right side of the page?
We are currently able to customize the toolbar, but only the top section using the NavItemsServiceservice:
constructor(private store: HeaderNotificationsStore, private navItemsService: NavItemsService) { }
this.navItemsService.addItems([ { id: 'HeaderNotifications', html: html, action: () => { this.showNotificationsPopup(!this.isNotificationsPopupShown()); }, order: 2 } ]);
Is there a way to achieve the same functionality for the configuration section of the toolbar?
We have observed that the scrollbar on our page does not appear initially. It only becomes visible after using the mouse wheel to scroll. Is there a way to make the scrollbar appear at the start of the page without requiring user to scroll with mouse?
Thanks
Two weeks ago, we opened a ticket regarding an issue with duplicated imports with different paths after generating proxies. We have seen that the problem has been resolved. However, we need to know when the fix will be released, as this issue is currently blocking our progress.
Could you please provide us with an estimated release date for this fix?
Thank you.
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:
After updating to 8.2.0 from 7.4.5 we got errors when generating proxies, there are duplicated imports with different paths.
Is there a way to fix that?
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:
{ type: ePropType.Enum, name: 'type', id: 'type', displayName: 'Blox::Entity:ModelDetail.Type', options: data => { return data.getInjected(ContentModelDetailService).getTypeSelectOptions$(); }, validators: () => [Validators.required] }, { type: ePropType.Enum, name: 'encryption', id: 'encryption', displayName: 'Blox::Entity:ModelDetail.EncryptionKeys', options: data => { return data.getInjected(ContentModelDetailService).getTypeEncryption$() ?? null; }, defaultValue: null as unknown as string, visible: data => { debugger; return true; } },
I have these 2 props, both select, i don't know how to get the value selected in my "type" prop, in debug i have record that is undefined (it's filled only in editForm and not dynamic) so how i get the value of my "type" prop dynamically so every time i change it i can hide or not my "encryption" select?
Sometimes we get this error,
System.ObjectDisposedException: Cannot access a disposed context instance. A common cause of this error is disposing a context instance that was resolved from dependency injection and then later trying to use the same context instance elsewhere in your application. This may occur if you are calling 'Dispose' on the context instance, or wrapping it in a using statement. If you are using dependency injection, you should let the dependency injection container take care of disposing context instances.
Object name: 'OpenIddictProDbContext'.
at Microsoft.EntityFrameworkCore.DbContext.CheckDisposed()
at Microsoft.EntityFrameworkCore.DbContext.get_ContextServices()
at Microsoft.EntityFrameworkCore.DbContext.get_ChangeTracker()
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.StateManager.OnStateChanged(InternalEntityEntry internalEntityEntry, EntityState oldState)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState oldState, EntityState newState, Boolean acceptChanges, Boolean modifyProperties)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.SetEntityState(EntityState entityState, Boolean acceptChanges, Boolean modifyProperties, Nullable1 forceStateWhenUnknownKey, Nullable1 fallbackState)
at Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry.set_State(EntityState value)
at Volo.Abp.OpenIddict.EfCoreOpenIddictDbConcurrencyExceptionHandler.HandleAsync(AbpDbConcurrencyException exception)
at Volo.Abp.OpenIddict.Tokens.AbpOpenIddictTokenStore.UpdateAsync(OpenIddictTokenModel token, CancellationToken cancellationToken)
at OpenIddict.Core.OpenIddictTokenManager1.UpdateAsync(TToken token, CancellationToken cancellationToken) at Volo.Abp.OpenIddict.Tokens.AbpTokenManager.UpdateAsync(OpenIddictTokenModel token, CancellationToken cancellationToken) at OpenIddict.Core.OpenIddictTokenManager1.TryRevokeAsync(TToken token, CancellationToken cancellationToken)