public async Task<ActionResult> Register(RegisterViewModel model) { if (ModelState.IsValid) { try { // Create a profile, password, and link the local login before signing in the user User user = new User(model.UserName); if (await Users.Create(user) && await Secrets.Create(new UserSecret(model.UserName, model.Password)) && await Logins.Add(new UserLogin(user.Id, IdentityConfig.LocalLoginProvider, model.UserName))) { await SignIn(user.Id, isPersistent: false); return RedirectToAction("Index", "Book"); } else { ModelState.AddModelError(String.Empty, "Failed to create login for: " + model.UserName); } } catch (DbEntityValidationException e) { ModelState.AddModelError("", e.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage); } } // If we got this far, something failed, redisplay form return View(model); }
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return RedirectToAction("Manage"); } if (ModelState.IsValid) { // Get the information about the user from the external login provider ClaimsIdentity id = await HttpContext.GetExternalIdentity(); if (id == null) { return View("ExternalLoginFailure"); } try { // Create a local user and sign in var user = new User(model.UserName); if (await Users.Create(user) && await Logins.Add(new UserLogin(user.Id, model.LoginProvider, id.FindFirstValue(ClaimTypes.NameIdentifier)))) { await SignIn(user.Id, id.Claims, isPersistent: false); return RedirectToLocal(returnUrl); } else { return View("ExternalLoginFailure"); } } catch (DbEntityValidationException e) { ModelState.AddModelError("", e.EntityValidationErrors.First().ValidationErrors.First().ErrorMessage); } } ViewBag.ReturnUrl = returnUrl; return View(model); }