public async Task<ActionResult> Create(RegisterViewModel userViewModel, params string[] selectedRoles) { var globalBudgetPeriod = (await db.AppGlobalSettings.FirstOrDefaultAsync()).BudgetPeriodID; RegisterViewModel viewModel = new RegisterViewModel(); if (ModelState.IsValid) { var newUser = new ApplicationUser { FirstName = userViewModel.FirstName, LastName = userViewModel.LastName, Title = userViewModel.Title, UserName = userViewModel.Email, Email = userViewModel.Email, AppModuleID = 1, DeptID = userViewModel.DeptID, DivID = userViewModel.DivID, IsActive = true }; // if password was not manually entered, generate random password and initialize account verification process string password; if (userViewModel.Password == null) { password = await UserManager.GenerateRandomPasswordAsync(); newUser.AutoPwdReplaced = false; } else { password = userViewModel.Password; newUser.AutoPwdReplaced = true; } var adminresult = await UserManager.CreateAsync(newUser, password); string requestMessage = ""; if (adminresult.Succeeded) { // if password was not manually entered, send confirmation email with randomly generated password if (userViewModel.Password == null) { string body; using (var sr = new StreamReader(Server.MapPath("\\Templates\\") + "RegisterAccountEmailTemplate.html")) { body = await sr.ReadToEndAsync(); } var code = await UserManager.GenerateEmailConfirmationTokenAsync(newUser.Id); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = newUser.Id, code = code }, protocol: Request.Url.Scheme); string messageBody = string.Format(body, callbackUrl, newUser.UserName, password); await UserManager.SendEmailAsync(newUser.Id, "Your AdminApps user account has been created. Please confirm your email address.", messageBody); } //Add User to the selected Roles if (selectedRoles != null) { var result = await UserManager.AddToRolesAsync(newUser.Id, selectedRoles); if (!result.Succeeded) { ModelState.AddModelError("", result.Errors.First()); ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name"); // populate Dept/Div dropdowns viewModel.DeptsList = new SelectList(await db.Depts.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDeptName"); viewModel.DivsList = new SelectList(await db.Divs.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDivName"); return View(viewModel); } } } else { ModelState.AddModelError("", adminresult.Errors.First()); ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name"); // populate Dept/Div dropdowns viewModel.DeptsList = new SelectList(await db.Depts.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDeptName"); viewModel.DivsList = new SelectList(await db.Divs.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDivName"); return View(viewModel); } Success("User was created successfully. " + requestMessage, true); return RedirectToAction("Index"); } ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name"); // populate Dept/Div dropdowns viewModel.DeptsList = new SelectList(await db.Depts.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDeptName"); viewModel.DivsList = new SelectList(await db.Divs.Where(b => b.BudgetPeriodID == globalBudgetPeriod).OrderBy(c => c.Code).ToListAsync(), "ID", "CompositeDivName"); return View(viewModel); }
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationViewModel model, string returnUrl) { if (User.Identity.IsAuthenticated) { return RedirectToAction("Index", "Manage"); } if (ModelState.IsValid) { // Get the information about the user from the external login provider var info = await AuthenticationManager.GetExternalLoginInfoAsync(); if (info == null) { return View("ExternalLoginFailure"); } var user = new ApplicationUser { UserName = model.Email, Email = model.Email }; var result = await UserManager.CreateAsync(user); if (result.Succeeded) { result = await UserManager.AddLoginAsync(user.Id, info.Login); if (result.Succeeded) { await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: false); return RedirectToLocal(returnUrl); } } AddErrors(result); } ViewBag.ReturnUrl = returnUrl; return View(model); }
private async Task SignInAsync(ApplicationUser user, bool isPersistent) { AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie, DefaultAuthenticationTypes.TwoFactorCookie); AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = isPersistent }, await user.GenerateUserIdentityAsync(UserManager)); }
// original action was async, but the action was made synchronous because the 'await' operator was commented out below public async Task<ActionResult> Register(RegisterViewModel model) { // disable Register action; users can only be manually created by IdentityManager or UserManager roles //return RedirectToAction("Index", "Home"); if (ModelState.IsValid) { var user = new ApplicationUser { FirstName = model.FirstName, LastName = model.LastName, DeptID = model.DeptID, DivID = model.DivID, UserName = model.Email, Email = model.Email, AppModuleID = 1, IsActive = true }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { var rolesForUser = UserManager.GetRoles(user.Id); if (!rolesForUser.Contains("CIPUser")) { // add user to CIPUser role UserManager.AddToRole(user.Id, "CIPUser"); } var code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); string body; using (var sr = new StreamReader(Server.MapPath("~/Templates/") + "NewUserRegistrationConfirmation.html")) { body = await sr.ReadToEndAsync(); } string messageBody = string.Format(body, callbackUrl); await UserManager.SendEmailAsync(user.Id, "Welcome New User", messageBody); ViewBag.Link = callbackUrl; return View("DisplayEmail"); } AddErrors(result); } // If we got this far, something failed, redisplay form // populate Dept/Div dropdowns AppGlobalSetting appGlobalSetting = await _unitOfWork.AppGlobalSettingRepository.GetFirstOrDefaultAsync(); model.DeptsList = new SelectList(await _unitOfWork.DeptRepository.GetAsync(d => d.BudgetPeriodID == appGlobalSetting.BudgetPeriodID, q => q.OrderBy(d => d.Code)), "ID", "CompositeDeptName"); model.DivsList = new SelectList(await _unitOfWork.DivRepository.GetAsync(d => d.BudgetPeriodID == appGlobalSetting.BudgetPeriodID, q => q.OrderBy(d => d.Code)), "ID", "CompositeDivName"); return View(model); }