Migrating from MVC4 to MVC5 and want to use ASP.NET Identity too but I am struggling to find anything that covers everything I think I need to do to migrate the Identity. Mi
I realised that the website I linked to in my question is telling you how to migrate to Identity
tables, but still use SimpleMembership
. I want to use Identity throughout, so I created an empty MVC application using Visual Studio so that I could copy in the code I wanted and fix it up. Here are the steps I followed to get Login and Logout working:
ApplicationUser.cs
to my Models projectIdentityConfig.cs
to my App_Start folderStartup.Auth.cs
to my App_Start folderAccountController.cs
to my Controllers folder (renamed existing controller)Startup.cs
to root folderAccountViewModels.cs
to ViewModels folderIdentityDbContext
(it does indeed mean that new tables are created in a migration)Add-Migration
gave an error ... "EntityType IdentityUserRole has no key defined"base.OnModelCreating
in my overrideAdd-Migration
& Update-Database
- adds the tables requiredUserProfile
to ApplicationUser
and updated the databaseSecurityStamp
with a Guid to prevent error during LoginUserProfile
, SimpleRoleProvider
and RoleManager
classes - replacing the code where necessary.WebMatrix.Data
and WebMatrix.WebData
dlls<roleManager enabled="true" defaultProvider="simple">
and <membership defaultProvider="simple">
from web.configSql used in step 14:
INSERT INTO dbo.aspnetusers (id
, email
, emailconfirmed
, passwordhash
, securitystamp
, phonenumber
, phonenumberconfirmed
, twofactorenabled
, lockoutenddateutc
, lockoutenabled
, accessfailedcount
, username
, organisationid
, firstname
, lastname
, inactive)
SELECT
u.id,
u.username Email,
m.isconfirmed EmailConfirmed,
m.password PasswordHash,
--SignInManager.PasswordSignInAsync (used in Login method)
--throws an exception http://stackoverflow.com/a/23354148/150342
NEWID() SecurityStamp,
u.telephone PhoneNumber,
CASE
WHEN u.telephone IS NULL THEN 0
ELSE 1
END PhoneNumberConfirmed,
0 TwoFactorEnabled,
NULL LockoutEndDateUtc,
0 LockoutEnabled,
m.passwordfailuressincelastsuccess AccessFailedCount,
u.username,
u.organisationid,
u.firstname,
u.lastname,
u.inactive
FROM dbo.userprofiles u
INNER JOIN dbo.webpages_membership m
ON m.userid = u.id
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetusers
WHERE id = u.id)
INSERT INTO dbo.aspnetroles (id
, name)
SELECT
roleid,
rolename
FROM dbo.webpages_roles r
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetroles
WHERE roleid = r.roleid)
INSERT INTO dbo.aspnetuserroles (userid
, roleid)
SELECT
userid,
roleid
FROM dbo.webpages_usersinroles ur
WHERE NOT EXISTS (SELECT
1
FROM dbo.aspnetuserroles
WHERE userid = ur.userid
AND roleid = ur.roleid)