public async Task <IActionResult> Register(RegisterViewModel registerVM, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { _logger.LogInformation("********Role: " + registerVM.Role + "*************"); IdentityResult result = null; Doctor doctor = null; Patient patient = null; //var user = new ApplicationUser { UserName = registerVM.Email, Email = registerVM.Email }; if (registerVM.Role == Roles.DOCTOR) { doctor = registerVM.GetNewDoctor(); // new Doctor { // UserName = registerVM.Email, // Email = registerVM.Email, // DegreeAbbreviation = registerVM.DegreeAbbreviation //}; result = await _userManager.CreateAsync(doctor, registerVM.Password); } else if (registerVM.Role == Roles.PATIENT) { patient = await registerVM.GetNewPatient(_doctorRepository); // new Patient { // UserName = registerVM.Email, // Email = registerVM.Email, // Doctor = await _doctorRepository.ReadAsync( registerVM.DoctorUserName ), // DoctorUserName = registerVM.DoctorUserName //}; result = await _userManager.CreateAsync(patient, registerVM.Password); } if (result != null && result.Succeeded) { var user = registerVM.Role == Roles.DOCTOR ? (ApplicationUser)doctor : (ApplicationUser)patient; await _userManager.AddToRoleAsync(user, registerVM.Role.ToString().ToUpper()); _logger.LogInformation("User created a new account with password."); var code = await _userManager.GenerateEmailConfirmationTokenAsync(user); var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme); await _emailSender.SendEmailConfirmationAsync(registerVM.Email, callbackUrl); await _signInManager.SignInAsync(user, isPersistent : false); _logger.LogInformation("User created a new account with password."); return(RedirectToLocal(returnUrl)); } AddErrors(result); //if() } // If we got this far, something failed, redisplay form return(View(registerVM)); }
public async Task <IActionResult> Register(RegisterViewModel registerVM, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { _logger.LogInformation("********Role: " + registerVM.Role + "*************"); //IdentityResult result = null; //var user = registerVM.Role == Roles.DOCTOR ? (ApplicationUser) doctor : (ApplicationUser) patient; switch (registerVM.Role) { case Roles.DOCTOR: Doctor doctor = registerVM.GetNewDoctor(); doctor = await _doctorRepository.CreateAsync(doctor); await _userManager.AddToRoleAsync(doctor, Roles.DOCTOR.ToUpper()); //await _users.AssignRole(doctor.UserName, Roles.DOCTOR.ToUpper()); await SetupUser(doctor, registerVM); break; case Roles.PATIENT: Patient patient = await registerVM.GetNewPatient(_doctorRepository); patient = await _patientRepository.CreateAsync(patient); await _userManager.AddToRoleAsync(patient, Roles.PATIENT); await SetupUser(patient, registerVM); break; case Roles.DEVELOPER: Developer dev = registerVM.GetNewDeveloper(); //var result = await _userManager.CreateAsync(dev, registerVM.Password); dev = await _developerRepository.CreateAsync(dev); await _userManager.AddToRoleAsync(dev, Roles.DEVELOPER); await SetupUser(dev, registerVM); break; default: break; } //var user = new ApplicationUser { UserName = registerVM.Email, Email = registerVM.Email }; //if ( result != null && result.Succeeded ) //{ return(RedirectToLocal(returnUrl)); //} // if //AddErrors( result ); } // if // If we got this far, something failed, redisplay form return(View(registerVM)); } // Register