示例#1
0
        public IHttpResponse Login(PostRegisterViewModel model)
        {
            string hashedPassword = this.hashService.Hash(model.Password);

            if (!(this.DbContext.Users.Any(user =>
                                           (user.Username == model.Username.Trim()) &&
                                           user.Password == hashedPassword)))
            {
                return(this.BadRequestErrorWithView("Invalid user information!"));
            }
            else
            {
                var user = this.DbContext.Users.First(u => u.Username == model.Username);

                //Adding cookie
                var mvcUser = new MvcUserInfo {
                    Username = user.Username, Role = user.Role.ToString()
                };
                var        cookieContent = this.UserCookieService.GetUserCookie(mvcUser);
                HttpCookie cookie        = new HttpCookie(AuthenticationCookieKey, cookieContent);

                this.Request.Cookies.Add(cookie);
                this.Response.Cookies.Add(cookie);
            }

            return(this.Redirect("/"));
        }
        public async Task <IActionResult> Register([FromBody] PostRegisterViewModel model)
        {
            if (!ModelState.IsValid)
            {
                string errorMsg = null;

                foreach (var test in ModelState.Values)
                {
                    foreach (var msg in test.Errors)
                    {
                        errorMsg = msg.ErrorMessage;
                    }
                }
                return(BadRequest(errorMsg));
            }

            var user = new IdentityUser
            {
                UserName = model.Email,
                Email    = model.Email
            };

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

            if (result.Succeeded)
            {
                var userAccount = await _userManager.FindByEmailAsync(model.Email);

                userAccount.EmailConfirmed = true;

                var findUserRole = await _roleManager.FindByNameAsync("User");

                var userRole = new IdentityRole("User");

                if (findUserRole == null)
                {
                    await _roleManager.CreateAsync(userRole);
                }

                if (!await _userManager.IsInRoleAsync(userAccount, userRole.Name))
                {
                    await _userManager.AddToRoleAsync(userAccount, userRole.Name);
                }

                return(new OkResult());
            }

            AddErrors(result);

            return(new BadRequestObjectResult(result.Errors));
        }
示例#3
0
        public IHttpResponse Register(PostRegisterViewModel model)
        {
            Regex usernameAndPasswordRegex = new Regex(@"^\w+$");
            Regex emailRegex = new Regex(@"^[A-z]+\@[A-z]+\.[A-z]{1,4}$");

            string hashedPassword        = this.hashService.Hash(model.Password);
            string hashedConfirmPassword = this.hashService.Hash(model.ConfirmPassword);

            model.Email = StringExtensions.UrlDecode(model.Email);

            if (emailRegex.Match(model.Email).Success == false ||
                usernameAndPasswordRegex.Match(model.Password).Success == false ||
                model.Password.Length < 3 ||
                model.Password.Length > 50 ||
                (usernameAndPasswordRegex.Match(model.Username).Success == false ||
                 model.Username.Length < 3 ||
                 model.Username.Length > 30))
            {
                return(this.BadRequestErrorWithView("Invalid registration information format!"));
            }
            if (this.DbContext.Users.Any(user => user.Email == model.Email))
            {
                return(this.BadRequestErrorWithView("Email is already in use!"));
            }
            if (hashedConfirmPassword == hashedPassword)
            {
                //Adding user to db

                User user = new User()
                {
                    Username = model.Username,
                    Password = hashedPassword,
                    Email    = model.Email
                };

                if (!this.DbContext.Users.Any())
                {
                    user.Role  = Role.Admin;
                    model.Role = Role.Admin;
                }
                else
                {
                    user.Role  = Role.User;
                    model.Role = Role.User;
                }

                using (this.DbContext)
                {
                    if (this.DbContext.Users.Any(u => u.Username == model.Username) == true)
                    {
                        return(this.BadRequestErrorWithView("Username already exists!"));
                    }

                    this.DbContext.Users.Add(user);
                    this.DbContext.SaveChanges();
                }

                ////Adding cookie
                var mvcUser = new MvcUserInfo {
                    Username = user.Username, Role = user.Role.ToString()
                };
                var        cookieContent = this.UserCookieService.GetUserCookie(mvcUser);
                HttpCookie cookie        = new HttpCookie(AuthenticationCookieKey, cookieContent);

                this.Request.Cookies.Add(cookie);
                this.Response.Cookies.Add(cookie);
            }

            return(this.Redirect("/"));
        }