public async Task <LoginRegisterResponse> Handle(RegisterCommand request, CancellationToken cancellationToken)
        {
            if (_userManager.Users.Any(x => x.UserName == request.StudentNo))
            {
                return(UserAlreadyExists());
            }
            if (_userManager.Users.Any(x => x.Email == request.EmailAddress))
            {
                return(EmailAlreadyExists());
            }
            var user = CreateUserModel(request);
            await _userManager.CreateAsync(user, request.Password);

            return(await SuccessWithJwtToken(user));
        }
예제 #2
0
        public async Task <Response> Handle(CreateTeacherCommand request, CancellationToken cancellationToken)
        {
            var res = await _userManager.CreateAsync(new User
            {
                TeacherCode = request.TeacherCode,
                UserName    = request.TeacherCode,
            });

            return(res.Succeeded ? Response.Success() : Response.Failed());
        }
예제 #3
0
        public async Task ShouldSaveAdditonalPremissionsDbTouched()
        {
            //act
            _user.AdditionalPermissions.Add(new Premission()
            {
            });

            //assert
            Assert.AreEqual(_user.AdditionalPermissions.Count, 1);
            await _userManager.CreateAsync(_user);

            var createdUser = await _userManager.FindByNameAsync(_user.UserName);

            Assert.AreEqual(createdUser.AdditionalPermissions.Count, 1);
        }
예제 #4
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new ApplicationUserDto {
                    UserName = Input.Username, Email = Input.Email
                };
                var result = await _userManager.CreateAsync(user, Input.Password);

                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);

                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                                                      $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return(RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl }));
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent : false);

                        return(LocalRedirect(returnUrl));
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
예제 #5
0
        public async Task <IActionResult> Create(UserCreateDTO userCreate)
        {
            if (ModelState.IsValid)
            {
                AppUser user = new AppUser
                {
                    Address        = userCreate.Address,
                    Email          = userCreate.Email,
                    PostalCode     = userCreate.PostalCode,
                    UserName       = userCreate.Username,
                    FirstName      = userCreate.FirstName,
                    PhoneNumber    = userCreate.PhoneNumber,
                    EmailConfirmed = true,
                    LastName       = userCreate.LastName,
                };
                if (userCreate.ImageFile != null)
                {
                    user.ImageName = await _fileWorker.AddFileToPathAsync(userCreate.ImageFile, "img");
                }
                var result = await _userManager.CreateAsync(user, userCreate.Password);

                if (result.Succeeded)
                {
                    string[] roles = userCreate.UserRoles.Split(',');
                    if (roles.Any())
                    {
                        await _userManager.AddToRolesAsync(user, roles);
                    }
                    return(LocalRedirect("/admin/usersmanager"));
                }
                foreach (var item in result.Errors)
                {
                    ModelState.AddModelError(item.Code, item.Description);
                }
            }
            await SetRoles();

            return(View(userCreate));
        }
예제 #6
0
        private User CreateGeuestUserAndAddCookieToRequest()
        {
            var user = new User()
            {
                CreateDateTime = DateTime.Now,
                UpdateDateTime = DateTime.Now,
                Id             = Guid.NewGuid(),
                UserName       = Guid.NewGuid().ToString().Replace("-", ""),
            };

            var res = AsyncHelper.RunSync(() => _userManager.CreateAsync(user));

            if (!res.Succeeded)
            {
                throw new InvalidOperationException(string.Join(",", res.Errors));
            }

            AsyncHelper.RunSync(() => _userManager.AddToRoleAsync(user.Id, PreDefRoles.Guest));
            HttpContext.Current.Request.Cookies.Add(new HttpCookie(_guestUserCookieName)
            {
                Value = user.Id.ToString(), Expires = DateTime.Now.AddYears(1)
            });
            return(user);
        }
예제 #7
0
        public async Task CreateAsync(AdminCreateUserDto model)
        {
            model.CheckArgumentIsNull(nameof(model));
            var user = await _userManager.FindByNameAsync(model.UserName);

            if (user != null)
            {
                throw new UserNameExistException();
            }

            user = await _factory.MakeAsync(model);

            var result = await _userManager.CreateAsync(user, model.Password);

            if (result == IdentityResult.Failed())
            {
                var msg = $"User Registration failed : {result.DumpErrors()}";
                throw new UserRegistrationException(message: msg);
            }

            await _userManager.AddClaimAsync(user, new Claim(
                                                 "WebsiteId", _websiteInfo.Id.ToString()
                                                 ));
        }
예제 #8
0
        public async Task <(User, IdentityResult)> CreateAdminUserAsync()
        {
            var adminUser = await _userManager.FindByNameAsync(AdminUserSeedInfo.Username);

            if (adminUser != null)
            {
                _logger.LogInformation($"{AdminUserSeedInfo.Username} already existed.");
                return(adminUser,
                       IdentityResult.Success
                       );
            }

            var adminRole = await _roleManager.FindByNameAsync(AdminUserSeedInfo.RoleName);

            if (adminRole != null)
            {
                _logger.LogInformation($"{AdminUserSeedInfo.RoleName} role already existed.");
            }
            else
            {
                adminRole = new Role(AdminUserSeedInfo.RoleName);
                var roleResult = await _roleManager.CreateAsync(adminRole);

                if (roleResult == IdentityResult.Failed())
                {
                    _logger.LogError($"'{adminRole.Name}' role creating has failed. {roleResult.DumpErrors()}");
                    return(null,
                           IdentityResult.Failed()
                           );
                }
            }

            adminUser = new User {
                UserName       = AdminUserSeedInfo.Username,
                Email          = AdminUserSeedInfo.Email,
                EmailConfirmed = true,
                RegisterDate   = _dateSvc.UtcNow(),
                Title          = AdminUserSeedInfo.Title,
                LockoutEnabled = true,
                Status         = UserStatus.Enabled
            };

            var result = await _userManager.CreateAsync(adminUser, AdminUserSeedInfo.Password);

            if (result == IdentityResult.Failed())
            {
                _logger.LogError($"'{AdminUserSeedInfo.Username}; user creation has failed. {result.DumpErrors()}");
                return(null,
                       IdentityResult.Failed()
                       );
            }

            var setLockoutResult = await _userManager.SetLockoutEnabledAsync(adminUser, enabled : false);

            if (setLockoutResult == IdentityResult.Failed())
            {
                _logger.LogError($"'{AdminUserSeedInfo.Username}' setLockout on user has failed. {setLockoutResult.DumpErrors()}");
                return(null,
                       IdentityResult.Failed()
                       );
            }

            var addRoleResult = await _userManager.AddToRoleAsync(adminUser, AdminUserSeedInfo.RoleName);

            if (addRoleResult == IdentityResult.Failed())
            {
                _logger.LogError($"Adding user:'******' to role:'{AdminUserSeedInfo.RoleName}' has failed. {addRoleResult.DumpErrors()}");
                return(null,
                       IdentityResult.Failed()
                       );
            }

            return(
                adminUser,
                IdentityResult.Success
                );
        }
예제 #9
0
 async Task IUserStore <User, string> .CreateAsync(User user)
 {
     await um.CreateAsync(user);
 }