Exemplo n.º 1
0
        public async Task <IHttpActionResult> Register(RegisterModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = new ServiceUser()
            {
                UserName = model.Email, Email = model.Email
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
            {
                if (result.Errors != null && result.Errors.Where(error => error.Contains("is already taken")).Any())
                {
                    return(BadRequest($"Email {model.Email} is already taken"));
                }
                return(GetErrorResult(result));
            }

            return(Created(new Uri($"{Request.RequestUri.GetLeftPart(UriPartial.Authority)}/token"), new { Email = model.Email }));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Register user
        /// </summary>
        /// <param name="data">Login data</param>
        /// <param name="hasManager">Has user manager</param>
        /// <returns>
        /// <see cref="IdentityResult"/>s object containing the result of registration.
        /// </returns>
        private IdentityResult RegisterUser(RegisterViewModel data, bool hasManager)
        {
            IdentityResult result = IdentityResult
                                    .Failed();

            var userDto = data
                          .ToDto();

            userDto.UserRole = hasManager
                ? "Manager" : "Employee";

            var findUserTask = ServiceUserManager
                               .FindByNameAsync(userDto.Login);

            findUserTask
            .Wait();

            var alreadyRegistered = (findUserTask.Result != null);

            if (alreadyRegistered)
            {
                throw new Exception(String.Format(
                                        "User {0} already exists!", userDto.Login));
            }

            var user = new ServiceUser(userDto);

            var createUserTask = ServiceUserManager
                                 .CreateAsync(user);

            createUserTask
            .Wait();

            result = createUserTask
                     .Result;

            if (result == IdentityResult.Success)
            {
                findUserTask = ServiceUserManager
                               .FindByNameAsync(userDto.Login);

                findUserTask
                .Wait();

                user = findUserTask
                       .Result;

                LoginUser(user);
            }

            return(result);
        }