Fully asynchronous, new and sweet ASP.NET Identity implementation for RavenDB.
Using ASP.NET Identity RavenDB port is pretty straight forward. You can install the AspNet.Identity.RavenDB library through NuGet. For now, the AspNet.Identity.RavenDB package which
targets the ASP.NET Identity 2.0.0 release is pre-release. So, be sure to use the -pre
switch while getting it through NuGet:
Install-Package AspNet.Identity.RavenDB -Pre
The following code snippet shows the easiest way to stand up the UserManager<TUser>
class with RavenUserStore<TUser>
:
IDocumentStore documentStore = new DocumentStore
{
Url = "http://localhost:8080",
DefaultDatabase = "AspNetIdentity"
}.Initialize();
using (IAsyncDocumentSession session = documentStore.OpenAsyncSession())
{
session.Advanced.UseOptimisticConcurrency = true;
RavenUserStore<RavenUser> ravenUserStore = new RavenUserStore<RavenUser>(session);
UserManager<RavenUser> userManager = new UserManager<RavenUser>(ravenUserStore);
// UserManager<RavenUser> is ready to use!
}
Couple of things to note here:
-
You MUST set the
UseOptimisticConcurrency
flag totrue
on theIAsyncDocumentSession
as shown above and leave it enabled till the end of theIAsyncDocumentSession
lifetime because we need to ensure the uniqueness of the username and the email.RavenUserStore<TUser>
checks if you enabled optimistic concurrency or not on its constructor. If you didn't, it will throw an exception. However, optimistic concurrency can be disabled any time during theIAsyncDocumentSession
lifetime by the session provider. That's why the library cannot possibly be sure to warn 100% of the time. So, it is extremely important to obey this rule and leave the optimistic concurrency enabled on the session till the end of its lifetime. Otherwise, you will have a chance of ending up overriding an existing user's data if a new user tries to register with the username of that existing user (which would be chaotic for you)! -
You don't need to use
RavenUser
entity type. However, your custom entity class must be derived fromRavenUser
class.