I am migrating an ASP.NET Core 1.0 application to ASP.NET Core 2.0.
In my startup I am configuring two identities:
services.AddIdentity<IdentityUser, IdentityRole>(configureIdentity)
.AddDefaultTokenProviders()
.AddUserStore<IdentityUserStore<IdentityUser>>()
.AddRoleStore<IdentityRoleStore<IdentityRole>>();
services.AddIdentity<Customer, CustomerRole>(configureIdentity)
.AddDefaultTokenProviders()
.AddErrorDescriber<CustomerIdentityErrorDescriber>()
.AddUserStore<CustomerStore<Customer>>()
.AddRoleStore<CustomerRoleStore<CustomerRole>>();
This worked fine in ASP.NET Core 1.0 but fails with the error: System.InvalidOperationException: 'Scheme already exists: Identity.Application' in ASP.NET Core 2.0.
In ASP.NET Core 2.0, if I remove one of the calls to AddIdentity
the error goes away. How do I migrate my code so that I can use two different types of identity user and role in my application? Or did I just make a fundamental error in understanding how things work back when I wrote this in ASP.NET Core 1.0?
After looking through the ASP.NET Core source code on github, a second identity could be added using this extension method:
Asp.net Core 2.2 provides a built-in method for that purpose.
How to use it:
In fact, read the implementation of this method from asp.net core 2.2 github repo
Thank you very much for your answer keith. This saved me a lot of time! One small improvement: I had to configure some options (IdentityOptions) in my case. Like for example: Password Complexity Rules.
I therefore included the registering of the Action setupAction. (This is the same way Microsoft does it within the AddIdentity inside IdentityServiceCollectionExtension)