예제 #1
0
        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));
        }
예제 #2
0
        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