November Happy Hour will be moved to Thursday December 5th.
November Happy Hour will be moved to Thursday December 5th.
If you didn't delete the old user tables, then you can use the old membership provider to try a login, if that is a success, then you can update the password on with the identity provider.
The way I did this task was it is:
Something like
[HttpPost] public async Task<ActionResult> InternalLogin(LoginViewModel viewModel) { var result = await SignInManager.PasswordSignInAsync(viewModel.Email, viewModel.Password, viewModel.RememberMe, shouldLockout: true); switch (result) { case SignInStatus.Success: break case SignInStatus.LockedOut: return PartialView("~/Views/Features/Login/_lockout.cshtml", viewModel) case SignInStatus.RequiresVerification: return RedirectToAction("SendCode", "Login", new { ReturnUrl = viewModel.ReturnUrl, RememberMe = viewModel.RememberMe }) default: return await UpdatePasswordFromOldSystem(viewModel); return Json(new { ReturnUrl = returnUrl }); }
public async Task<ActionResult> UpdatePasswordFromOldSystem(LoginViewModel viewModel) { // the password was correct, but it wasn't in new system, update it if (Membership.ValidateUser(viewModel.Email, viewModel.Password)) { UserManager.PasswordValidator = new PasswordValidator() // turn off validating requirements { RequiredLength = 0, RequireNonLetterOrDigit = false, RequireDigit = false, RequireLowercase = false, RequireUppercase = false }; SiteUser user = await UserManager.FindByNameAsync(viewModel.Email); // get the user string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id); // get reset token IdentityResult reset = await UserManager.ResetPasswordAsync(user.Id, code, viewModel.Password); // reset the password with the password the user used and token we got if (reset.Succeeded) // if it succeeded, then try login again { return await InternalLogin(viewModel); } } // wrong username/password, show error ModelState.AddModelError("Password", _localizationService.GetString(() => Translations.Login.WrongPasswordOrEmail)); viewModel.Password = null; return PartialView("~/Views/Features/Login/_login.cshtml", viewModel); }
Remember to change password on the old provider too when a user change password :) (I know this is a litle hacky way, but it works for me at least :))
Oh, and this is the migration script i ran (after deployment so the tables get made)
INSERT INTO AspNetUsers( Id, Email, EmailConfirmed, PasswordHash, SecurityStamp, PhoneNumberConfirmed, TwoFactorEnabled, LockoutEnabled, AccessFailedCount, UserName, NewsLetter, IsApproved, IsLockedOut, Comment, CreationDate, LastLoginDate ) SELECT aspnet_Users.UserId, aspnet_Membership.Email, 1, ('AFPMQQQEExOuGGdX/PYqosGS4johxSt7NycCbbxRG/VtYAywHKYeNR5genTrTdOB7g=='), '0b039082-4d6d-4fab-b36b-01492e58e9c4', 0, 0, 0, 0, aspnet_Users.UserName, 0, 1, 0, aspnet_Membership.Comment, ISNULL(aspnet_Membership.CreateDate, GETDATE()), aspnet_Membership.LastLoginDate FROM aspnet_Users LEFT OUTER JOIN aspnet_Membership ON aspnet_Membership.ApplicationId = aspnet_Users.ApplicationId AND aspnet_Users.UserId = aspnet_Membership.UserId; INSERT INTO AspNetRoles(Id,Name) SELECT RoleId,RoleName FROM aspnet_Roles; INSERT INTO AspNetUserRoles(UserId,RoleId) SELECT UserId,RoleId FROM aspnet_UsersInRoles;
try this version for SQL Password hasher https://stackoverflow.com/questions/46074408/migration-of-asp-net-membership-to-mvc-net-identity-password-issue
Thanks for the suggestions guys, they're all good but after finally getting a lot of sleep this weekend I resolved this issue, I had made a stupid mistake in my LoginController in which I was calling the ApplicationUserManager instead of my CustomUserManager, therefore the users were never getting to my passwordhasher.
Hello,
I'm migrating our newly updated CMS10/Commerce website from using the old .net Membership references to Episerver's aspnetidentity.
I followed the directions on this page, and all seemed to work well:
http://world.episerver.com/documentation/Items/Developers-Guide/Episerver-CMS/9/Security/episerver-aspnetidentity/
Next, I successfully ran a script that imported all our users from the old membership tables to the new aspnet identity tables.
Whenever I try to log on using an old login I get the following error:
After some searching, I tried implementing the following fix: http://sveinaandahl.blogspot.se/2016/03/how-to-validate-old-passwords-when.html
I added a UserManager Class:
And then I modified my StartUp.cs:
But it appears to have no effect, I still receive the same error every time. Has anyone dealt with this or fixed this that can help?
Thanks!
John