public async Task <IActionResult> RegisterMember(RegisterMemberViewModel viewModel) { if (ModelState.IsValid) { var member = new Member { FirstName = viewModel.FirstName, LastName = viewModel.LastName, Email = viewModel.Email, PhoneNum = viewModel.PhoneNum }; if (!EmailExists(viewModel.Email)) { _context.Add(member); await _context.SaveChangesAsync(); } else { return(Json($"{viewModel.Email} is in use")); } return(RedirectToAction(nameof(MemberOverView))); } return(View(viewModel)); }
public async Task <ActionResult> RegisterMember(RegisterMemberViewModel model) { if (ModelState.IsValid) { if (!_db.Users.Any(u => u.Email == model.Email)) { try { var user = new ApplicationUser { UserName = model.Email, Email = model.Email, FirstName = model.FirstName, MiddleName = model.MiddleName, LastName = model.FirstName, }; var result = await UserManager.CreateAsync(user, model.Password); if (result.Succeeded) { var member = new Member { MemberId = user.Id, Email = user.Email, FirstName = user.FirstName, MiddleName = user.MiddleName, LastName = user.LastName, }; _db.Members.Add(member); await _db.SaveChangesAsync(); await this.UserManager.AddToRoleAsync(user.Id, "Members"); // For more information on how to enable account confirmation and password reset please visit // http://go.microsoft.com/fwlink/?LinkID=320771 // Send an email with this link // string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id); // var callbackUrl = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme); // await UserManager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>") // await SignInManager.SignInAsync(user, isPersistent: false, rememberBrowser: true); ViewBag.Message = "Registration Successful Sign In Now, To Continue"; return(RedirectToAction("Login", "Account", new { message = ViewBag.Message })); } } catch (Exception ex) { ViewBag.Message = "Registration was NOT Successful, Try again " + "" + ex; return(View(model)); } } ViewBag.Message = "This Email" + "" + "" + model.Email + "" + " already exist, Login or use another email address"; return(View()); } ViewBag.Message = "Verify your entry "; return(View(model)); }
public async Task <IActionResult> RegisterMember(RegisterMemberViewModel model) { if (ModelState.IsValid) { DateTime date; try { // Possible exception. The date selected by the client may not correctly represent calender date. Eg. 31st February. date = new DateTime(model.YearOfBirth, model.MonthOfBirth, model.DayOfBirth); } catch (Exception) { // If the user selects an invalid date such as 31st February, the user is given an error message. ModelState.AddModelError("DayOfBirth", "Your date of birth is invalid"); return(View(model)); } // Copy data from RegisterMemberViewModel to ApplicationUser to be stored in the database. ApplicationUser user = new ApplicationUser { UserName = model.Email, NormalizedUserName = model.Email, Email = model.Email, NormalizedEmail = model.Email, Title = model.Title, FirstName = model.FirstName, LastName = model.LastName, DateOfBirth = date, Gender = model.Gender, PhoneNumber = model.PhoneNumber, AddressLineOne = model.AddressLineOne, AddressLineTwo = model.AddressLineTwo, Town = model.Town, Postcode = model.Postcode }; var result = await userManager.CreateAsync(user, model.Password); if (result.Succeeded) { // Adding the following claims to new users. IEnumerable <Claim> claims = new List <Claim> { new Claim("DateOfBirth", user.DateOfBirth.ToShortDateString()), new Claim("RegistrationDate", DateTime.Now.ToShortDateString()) }; await userManager.AddClaimsAsync(user, claims); // A token is generated which will be used to verify the email of the user. string token = await userManager.GenerateEmailConfirmationTokenAsync(user); // A confirmation link is created using the id of the user and the token. var confirmationLink = Url.Action("ConfirmEmail", "Account", new { userId = user.Id, token = token }, Request.Scheme); // An email is sent to the user with the confirmation link to verify their email. string subject = "verify your email"; string message = $"Hello {model.FirstName} {model.LastName}.\nThank your for registering with us. Please click on the link below to vaidate your email. The link expires after 1 day.\n{confirmationLink}\n"; Email.Send(env.IsDevelopment() ? "*****@*****.**" : model.Email, subject, message); return(RedirectToAction("ConfirmEmail", "Error")); } else { foreach (var error in result.Errors) { ModelState.AddModelError(string.Empty, error.Description); } } } return(View(model)); }