Our solution uses Azure AD for user authentication and is using the following code:
`
AddOpenIdConnect("AzureOpenId", "SSO", options =>
{
options.Authority = $"{configuration["AzureAd:Instance"]}{configuration["AzureAd:TenantId"]}/v2.0/";
options.ClientId = configuration["AzureAd:ClientId"];
options.ResponseType = OpenIdConnectResponseType.CodeIdToken;
options.CallbackPath = configuration["AzureAd:CallbackPath"];
options.ClientSecret = configuration["AzureAd:ClientSecret"];
options.RequireHttpsMetadata = false;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.Scope.Add("email");
options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "sub");
});
When this process registers the user, I would like to fill in the rest of the AbpUsers details (Firstname, Lastname etc). Do I need to override the ExternalUserRegistration code or can it be achieved through configuration of the scopes?
Thanks for the feedback. Looking forward to the patch.
I have pushed the repo to a public repository. It can be found here:
https://github.com/ImranHugo/abp-entity-sample.git
Where can I upload the source to? I can send the entire application.
Thats for the speedy reply. The answer to both your questions is yes. The *ModelSnapshot.cs class has the Host column specified on the Volo.Saas.Tenants.Tenant entity and the physical database column has the extra column.
This is the content of the DbContext.cs class
` namespace TaxDep.EntityFrameworkCore;
[ReplaceDbContext(typeof(IIdentityProDbContext))] [ReplaceDbContext(typeof(ISaasDbContext))] [ConnectionStringName("Default")] public class TaxDepDbContext : AbpDbContext
#region Entities from the modules
/* Notice: We only implemented IIdentityProDbContext and ISaasDbContext
* and replaced them for this DbContext. This allows you to perform JOIN
* queries for the entities of these modules over the repositories easily. You
* typically don't need that for other modules. But, if you need, you can
* implement the DbContext interface of the needed module and use ReplaceDbContext
* attribute just like IIdentityProDbContext and ISaasDbContext.
*
* More info: Replacing a DbContext of a module ensures that the related module
* uses this DbContext on runtime. Otherwise, it will use its own DbContext class.
*/
// Identity
public DbSet<IdentityUser> Users { get; set; }
public DbSet<IdentityRole> Roles { get; set; }
public DbSet<IdentityClaimType> ClaimTypes { get; set; }
public DbSet<OrganizationUnit> OrganizationUnits { get; set; }
public DbSet<IdentitySecurityLog> SecurityLogs { get; set; }
public DbSet<IdentityLinkUser> LinkUsers { get; set; }
// SaaS
public DbSet<Tenant> Tenants { get; set; }
public DbSet<Edition> Editions { get; set; }
public DbSet<TenantConnectionString> TenantConnectionStrings { get; set; }
#endregion
public TaxDepDbContext(DbContextOptions<TaxDepDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
/* Include modules to your migration db context */
builder.ConfigurePermissionManagement();
builder.ConfigureSettingManagement();
builder.ConfigureBackgroundJobs();
builder.ConfigureAuditLogging();
builder.ConfigureIdentityPro();
builder.ConfigureOpenIddict();
builder.ConfigureFeatureManagement();
builder.ConfigureLanguageManagement();
builder.ConfigureSaas();
builder.ConfigureTextTemplateManagement();
builder.ConfigureBlobStoring();
builder.ConfigureGdpr();
/* Configure your own tables/entities inside here */
//builder.Entity<YourEntity>(b =>
//{
// b.ToTable(TaxDepConsts.DbTablePrefix + "YourEntities", TaxDepConsts.DbSchema);
// b.ConfigureByConvention(); //auto configure for the base class props
// //...
//});
builder.ConfigurePayment();
}
}
` As per the documentation, here is the setup of the *ExtensionMappings.cs
As per the documentation, here is the content of the *ExtensionConfigurator.cs class (inside Domain.Shared)
As mentioned, this worked as is in a previous version of ABP. I realise an easy workaround would be the adjust the TenantRepository to use a stored procedure instead, although it would be great to not have to create a workaround.
I have a requirement to resolve each tenant by a custom URL. I followed the blog post here https://blog.antosubash.com/posts/abp-extend-tenant-with-custom-host to add a custom field to y tenant table called "Host". When a user navigates to my solution on the URL, it will resolve the tenant automatically. I had a solution based on v4.4 which worked perfectly using this approach as documented in the blog. I upgraded the solution to v6 and the error being returned now is
Translation of 'EF.Property(EntityShaperExpression: Volo.Saas.Tenants.Tenant ValueBufferExpression: ProjectionBindingExpression: EmptyProjectionMember IsNullable: False , "Host")' failed. Either the query source is not an entity type, or the specified property does not exist on the entity type.
I then created a brand new v6.0.0 ABP solution and followed the blog thinking that I perhaps broke something in the upgrade. Unfortunately, it displays the same error.
The code fails as it is unable to find the new custom field added to the entity.
Do you have any samples of this? Do you mean delete the IdentityServer code in the tiered solution and adjust the URLs in the API host and Web solution?
We are developing a brand new tiered web solution (MVC Razor Pages) for one of our clients. The client requirement is to use either OKTA or Salesforce Identity for authentication. Is it possible to remove the IdentityServer component from the tiered solution and replace it with OKTA / SalesForce identity by changing the auth server URLS in the Web and API layer?
I have been working on a solution which is using ABP Framework Version 4.2.0 for a few months now.
ABP Suite works great to generate entities and to update existing entities. I updated an entity this morning with no issue.
I saw that there was an update to the CLI and the Suite and I updated both after I updated my entity this morning.
While working on another ticket, I needed to update another entity but am now receiving this error:
I attempted to uninstall both the suite and the CLI and reinstall, but this did not help.
Any suggestions on getting around this issue?
Ok, understood...but is it possible to have the UI blocked until all async ajax requests complete?