ASP.NET Identity provider that uses MongoDB for storage
Branch: master
Clone or download
MaxiomTech
MaxiomTech Merge pull request #35 from sitebro/UpdateToMongoDBDriver243
Update MongoDB.AspNet.Identity
Latest commit 09ace3c Sep 1, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Properties Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
TestApplication Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
nuget Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
.gitattributes Added additional constructor for providing your own database. Used th… Jan 24, 2014
.gitignore Refactored UserStore and generated nupkg 1.0.6 May 8, 2017
IdentityUser.cs Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
IdentityUserClaim.cs Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
LICENSE Initial commit Oct 27, 2013
MongoDB.AspNet.Identity.csproj Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
MongoDB.AspNet.Identity.nuspec Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
MongoDB.AspNet.Identity.sln Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
MongoDB.AspNet.Identity.sln.GhostDoc.xml Refactored table name to const variable. Feb 14, 2014
README.md Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
UserStore.cs Implemented additional interfaces and properties. Added new Test MVC App May 8, 2017
Utils.cs GhostDoc add comments to all classes Jan 23, 2014
packages.config Refactored UserStore and generated nupkg 1.0.6 May 8, 2017

README.md

MongoDB.AspNet.Identity

ASP.NET Identity provider that users MongoDB for storage

Purpose

ASP.NET MVC 5 shipped with a new Identity system (in the Microsoft.AspNet.Identity.Core package) in order to support both local login and remote logins via OpenID/OAuth, but only ships with an Entity Framework provider (Microsoft.AspNet.Identity.EntityFramework).

News

02-11-2014 - [http://blogs.msdn.com/b/webdev/archive/2014/02/11/announcing-preview-of-microsoft-aspnet-identity-2-0-0-beta1.aspx](Microsoft has released Microsoft.AspNet.Identity v2 Beta 1). I will be addressing these issues and introducing them into the MongoDB.AspNet.Identity provider.

Features

  • Drop-in replacement ASP.NET Identity with MongoDB as the backing store.
  • Requires only 1 mongo document type, while EntityFramework requires 5 tables
  • Contains the same IdentityUser class used by the EntityFramework provider in the MVC 5 project template.
  • Supports additional profile properties on your application's user model.
  • Provides UserStore implementation that implements the same interfaces as the EntityFramework version:
    • IUserStore
    • IUserLoginStore
    • IUserRoleStore
    • IUserClaimStore
    • IUserPasswordStore
    • IUserSecurityStampStore
    • IUserEmailStore (1.0.7)
    • IUserLockoutStore<TUser, string> (1.0.7)
    • IUserTwoFactorStore<TUser, string> (1.0.7)

Instructions

These instructions assume you know how to set up MongoDB within an MVC application.

  1. Create a new ASP.NET MVC 5 project, choosing the Individual User Accounts authentication type.
  2. Remove the Entity Framework packages and replace with MongoDB Identity:
Uninstall-Package Microsoft.AspNet.Identity.EntityFramework
Uninstall-Package EntityFramework
Install-Package MongoDB.AspNet.Identity
  1. In ~/Models/IdentityModels.cs:
    • Remove the namespace: Microsoft.AspNet.Identity.EntityFramework
    • Add the namespace: MongoDB.AspNet.Identity
    • Remove the ApplicationDbContext class completely.
  2. In ~/Controllers/AccountController.cs
    • Remove the namespace: Microsoft.AspNet.Identity.EntityFramework
    • Add the connection string name to the constructor of the UserStore. Or empty constructor will use DefaultConnection
  3. In ~/App_Start/IdentityConfig.cs
    • Remove reference to ApplicationDbContext
    • Amend ApplicationUserManager to inherit UserManager<ApplicationUser, string>. Also amend parameter for ApplicationUser.GenerateUserIdentityAsync
  4. In ~/App_Start/Startup.Auth.cs
    • Remove app.CreatePerOwinContext(ApplicationDbContext.Create);
AccountController requires a parameterless constructor. 
You could instantiate the UserManager in this contructor using any the UserStore constructors.
public AccountController()
{
    //examples
    this.UserManager = 
    new ApplicationUserManager(new UserStore<ApplicationUser>("MyConnection"));
}

Connection Strings

The UserStore has multiple constructors for handling connection strings. Here are some examples of the expected inputs and where the connection string should be located.

1. SQL Style

UserStore<TUser>(string connectionNameOrUrl)

UserStore("Mongo")

web.config

<add name="Mongo" connectionString="Server=localhost:27017;Database={YourDataBase}" />

2. Mongo Style

UserStore<TUser>(string connectionNameOrUrl)

UserStore("Mongo")

web.config

<add name="Mongo" connectionString="mongodb://localhost/{YourDataBase}" />

OR

UserStore<TUser>(string connectionNameOrUrl)

UserStore("mongodb://localhost/{YourDataBase}")

Thanks To

Special thanks to David Boike whos RavenDB AspNet Identity project gave me the base for jumpstarting the MongoDB provider