コード例 #1
0
        public async Task SignUpAsync(UserModel user)
        {
            if (string.IsNullOrEmpty(user.Password))
            {
                user.Errors.Add(ExceptionsInfo.InvalidPassword);
            }

            if (string.IsNullOrEmpty(user.FirstName))
            {
                user.Errors.Add(ExceptionsInfo.InvalidFirstName);
            }

            if (string.IsNullOrEmpty(user.LastName))
            {
                user.Errors.Add(ExceptionsInfo.InvalidLastName);
            }

            if (user.Errors.Any())
            {
                throw new UserException(HttpStatusCode.BadRequest, user.Errors);
            }

            user.PhoneNumber = "";
            user.Id          = 0; // NOTE: Id is setting to 0 cause of user ability to select custom id
            var applicationUser = _userMapper.Map(user);
            var result          = await _userManager.CreateAsync(applicationUser, user.Password);

            var userNameError = result.Errors.FirstOrDefault(item => item.Code == "DuplicateUserName");

            if (userNameError != null)
            {
                userNameError.Description = $"Nickname '{user.NickName}' is already taken";
            }
            if (!result.Succeeded)
            {
                throw new UserException(HttpStatusCode.BadRequest,
                                        result.Errors.Select(error => error.Description).ToList());
            }

            var emailConfirmationToken = await _userManager.GenerateEmailConfirmationTokenAsync(applicationUser);

            await _emailProvider.SendEmailConfirmationMessageAsync(applicationUser.Id, emailConfirmationToken,
                                                                   user.Email);

            result = await _userManager.AddToRoleAsync(applicationUser, UserRole.Client.ToString());

            if (!result.Succeeded)
            {
                throw new UserException(HttpStatusCode.BadRequest,
                                        result.Errors.Select(error => error.Description).ToList());
            }
        }
コード例 #2
0
        public async Task SignUpAsync(UserModel model)
        {
            var user = _mapper.Map <User>(model);

            if (await EmailExistsAsync(model.Email))
            {
                throw new ServerException(HttpStatusCode.BadRequest,
                                          ExceptionMessage.EMAIL_ALREADY_EXISTS);
            }
            if (await UsernameExistsAsync(model.Username))
            {
                throw new ServerException(HttpStatusCode.BadRequest,
                                          ExceptionMessage.USERNAME_ALREADY_EXISTS);
            }

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

            if (!result.Succeeded)
            {
                throw new ServerException(HttpStatusCode.BadRequest,
                                          ExceptionMessage.CREATE_USER_FAILED);
            }

            await _userManager.AddToRoleAsync(user, RoleType.Client.ToString());

            string token = await _userManager.GenerateEmailConfirmationTokenAsync(user);

            string encoded = HttpUtility.UrlEncode(token);

            var uriBuilder = new UriBuilder(_emailConfirmation.Url);
            var query      = HttpUtility.ParseQueryString(uriBuilder.Query);

            query[EMAIL_NAME] = model.Email;
            query[TOKEN_NAME] = encoded;

            uriBuilder.Query = query.ToString();
            string uriString = uriBuilder.ToString();

            await _emailProvider.SendEmailConfirmationMessageAsync(model.Email, uriString);
        }