This is a known limitation of ABP Suite’s navigation-property discovery in modular solutions: Suite primarily detects “existing entities” (like IdentityUser) from the main solution’s module/package graph and the standard layered projects, but it doesn’t reliably surface entities coming only from a referenced ABP module package inside a separate custom module in the way you expect.
Workaround (supported by Suite): add the navigation property manually instead of relying on the dropdown list.
IdentityUser doesn’t appear, use the manual entry approach described in the Suite docs (“Alternatively, you can add IdentityUser … by manually entering the required information”).Volo.Abp.Identity.IdentityUser)IdentityUserId / UserId as Guid)After generation, if you hit EF Core mapping errors when relating to module entities (commonly around ExtraProperties), ensure your module’s DbContext model configuration includes the module mappings before configuring your own entities (e.g., the relevant builder.ConfigureIdentity() / builder.ConfigureIdentityPro() calls depending on what you use). This is a separate runtime concern from Suite’s UI not listing the entity, but it’s a common follow-up when adding relations to IdentityUser.
If you need Suite to list those module entities in the UI for custom modules specifically: there is no verified configuration switch/documented setting that enables that behavior today; the practical approach is the manual navigation-property entry.
Links (verified):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
So the supported setup is:
CreateMap, etc.).If you want your own application layer to keep mapping via AutoMapper, register AutoMapper in your modules as you did in ABP 9; ABP’s object mapping abstraction is designed to allow different mapping providers by module/app.
(verified)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Profiles and registrations for your code.AddAutoMapperObjectMapper<TModule>(), make sure consumers map with the same ObjectMapperContext to avoid “No object mapping was found…” errors in some layers (e.g., Blazor).Links:
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
__tenant header (or query string when needed).Pick one storage mechanism:
Example (cookie):
abp_tenant = tenant name (or id, depending on your backend usage; ABP commonly resolves by name in UI switchers).__tenant header)ABP Angular UI does this: it reads the selected tenant and sends it as __tenant header on each request.
In Next.js, do the same in your API client wrapper:
// apiClient.ts
export async function abpFetch(input: RequestInfo, init: RequestInit = {}) {
const headers = new Headers(init.headers);
// Read from cookie (client-side example)
const tenant = document.cookie
.split("; ")
.find(x => x.startsWith("abp_tenant="))
?.split("=")[1];
if (tenant) {
headers.set("__tenant", decodeURIComponent(tenant));
}
return fetch(input, { ...init, headers });
}
If you also do SSR, read the cookie from the incoming request in getServerSideProps / route handlers and forward __tenant.
abp_tenant=<tenantName>__tenantIn ABP UIs, the selected tenant also affects application-configuration (and what menus/features are visible). In your Next.js app, after setting the tenant cookie/header:
If your login is done via the ABP Auth Server pages, tenant selection can be involved in the login UX. In custom SPAs, it’s common to:
__tenant for API calls.(If you must pass tenant during auth redirects, ABP UIs pass tenant via request parameters/headers depending on flow; the key concept remains: tenant context must be resolved on the server side.)
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Please contact us at https://abp.io/contact.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
Volo.Abp.OperationRateLimiting.Domain-v10.3.0.0 is a commercial (Pro) module. In ABP v10.3, your app is trying to load/use this module (often indirectly via Account Pro modules / template defaults), but your current ABP license/token doesn’t grant access to it, so the runtime blocks it with:
You are not granted permission to use the module 'Volo.Abp.OperationRateLimiting.Domain-v10.3.0.0'.
Fix options (pick one):
AbpLicenseCode (or the correct ABP license setup for your environment).DependsOn(...) that pulls in OperationRateLimiting (directly or via a Pro module you don’t have rights for), and remove the related NuGet packages from your solution.abp login <username> -p <password>
(This is especially common in Docker/CI or new machines where the token isn’t present.)
*.HttpApiHostModule / *.WebModule / *.BlazorModule DependsOn(...) chain for modules that could bring it in (Account Pro, etc.).*.csproj for Volo.Abp.OperationRateLimiting.* packages (or Pro packages that depend on it).Links (verified):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
TenantUserSharingStrategy.Shared, username/email must be globally unique (Host + all tenants). So having two different users with the same UserName = admin is not expected in a correctly working Shared User Accounts setup.Do not seed/create “admin” separately per tenant when using Shared strategy.
admin user (classic isolated behavior), you can end up with conflicting global identities.Fix your current data
AbpUsers record for a given UserName (and also uniqueness across emails).Re-test using invitations
admin) once.This behavior is not expected under Shared User Accounts; it indicates your tenants were created/seeded in a way that produced duplicate global identities (two different host users with the same username). The correct approach is one user globally + tenant associations, not “one admin per tenant”.
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This error means ABP Angular Core options are not registered in the injector, so RestService can’t be created:
RestService -> InjectionToken CORE_OPTIONS.
In ABP Angular, CORE_OPTIONS is provided by ABP Core initialization (and for Basic theme layouts also by the theme config providers). When you navigate to the Angular-side login (AccountLayoutComponent from the theme), your app must already have these providers registered in the root application config/module.
CORE_OPTIONS)In your Angular root bootstrap (Standalone style: app.config.ts, Module style: AppModule), make sure ABP Core is configured with the environment.
Standalone (ABP v10 / Angular 21 typical): src/app/app.config.ts
import { ApplicationConfig } from '@angular/core';
import { provideAbpCore } from '@abp/ng.core';
import { environment } from '../environments/environment';
export const appConfig: ApplicationConfig = {
providers: [
provideAbpCore({
environment,
}),
],
};
Module-based (if your app still uses NgModules): app.module.ts
import { CoreModule } from '@abp/ng.core';
import { environment } from '../environments/environment';
@NgModule({
imports: [
CoreModule.forRoot({
environment,
}),
],
})
export class AppModule {}
Since you said you use Basic Theme source code and want “Angular side login”, you must also provide the Basic theme configuration (this registers the layouts like AccountLayoutComponent correctly).
src/app/app.config.ts:
import { provideThemeBasicConfig } from '@abp/ng.theme.basic';
export const appConfig: ApplicationConfig = {
providers: [
// ...provideAbpCore(...)
provideThemeBasicConfig(),
],
};
A known cause is tsconfig.json / workspace paths overriding ABP package resolution so the app ends up loading mismatched ABP packages and misses the provider.
Add these mappings to the tsconfig.json used by your Angular app (not a library tsconfig):
{
"compilerOptions": {
"paths": {
"@abp/*": ["node_modules/@abp/*"],
"@volo/*": ["node_modules/@volo/*"]
}
}
}
Then clean reinstall:
rm -rf node_modules package-lock.json yarn.lock
yarn # or npm install
yarn start
Sources (validated):
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.
This error means your public website is hitting an API endpoint that expects id as a Guid, but it is receiving a slug like "home":
GET https://localhost:44362/homeThe value 'home' is not valid. (id).../{id} where id is Guid.That’s why all CMS pages fail: the “catch-all route” that should map /{slug} to the CMS Kit public page renderer is not being used anymore (routing order / endpoint mapping / fallback configuration changed after upgrade or custom routing/middleware).
Apply these fixes (they are safe and deterministic):
[DependsOn(
// ...
typeof(Volo.CmsKit.Public.Web.CmsKitPublicWebModule)
)]
public class YourPublicWebModule : AbpModule
{
}
If this dependency is missing, ABP won’t register the Razor Pages/routes that handle /{slug}.
pattern: "{id}" or "{controller}/{action}/{id:guid?}" mapped at rootapp.MapGet("/{id}", ...) where id is bound to GuidMapFallbackToPage(...) / fallback endpoint that forwards everything to an endpoint that binds id as GuidRemove/adjust those routes so they don’t steal /{slug}.
FallbackPolicy = DefaultPolicy / RequireAuthenticatedUser().Make sure you did not configure a global “require authenticated user” policy for the Public Website app. If you did, remove it (public CMS pages must be anonymously accessible).
GET /home should return HTML (page content)GET /api/cms-kit-public/pages/home should return 200/204 (depending on existence), not a redirect/challengeIf you did any module/feature changes, also run DbMigrator (you already do, but do it once after these changes).
This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.