Example #1
0
        public async Task <ActionResult> PostUser(User user)
        {
            // 检查用户名是否已经注册
            var userName = user?.Username;

            if (string.IsNullOrWhiteSpace(userName))
            {
                return(BadRequest("must provide a not empty username in request body"));
            }
            else
            {
                if (_context.Users.SingleOrDefault(u => u.Username == userName) != null)
                {
                    return(BadRequest("account (username) already registered"));
                }
            }

            // 查询请求body中是否包含邮箱、
            var email = user.Claims.SingleOrDefault(c => c.Type == "email")?.Value;

            if (email != null)
            {
                if (email.IsEmail())
                {
                    // 查询email是否已经存在
                    var isEmailExist = _context.Claims.SingleOrDefault(c => c.Value == email) != null;


                    if (!isEmailExist)
                    {
                        // 查询请求body中是否包含验证码
                        var codeClaim = user.Claims.SingleOrDefault(c => c.Type == "verifyCode");
                        if (codeClaim != null)
                        {
                            // 在检查验证码之前清理过期的验证码
                            _codeService.RemoveOverdue();

                            // 若邮箱和验证码与缓存一致则注册成功
                            if (_codeService.VerifyInfos.SingleOrDefault(c => c.Email == email && c.VerificationCode == codeClaim.Value) != null)
                            {
                                // 从缓存中移除email和验证码信息,从请求的user对象中移除包含验证码的claim
                                _codeService.Remove(email, "register");
                                user.Claims.Remove(codeClaim);

                                _context.Users.Add(user);
                                await _context.SaveChangesAsync();

                                //return CreatedAtAction("GetUserMessage", new { id = user.Id }, user);
                                return(Ok("register success"));
                            }
                            else
                            {
                                return(BadRequest("register failed, email or verification code error"));
                            }
                        }
                        else
                        {
                            return(BadRequest("verification code not found"));
                        }
                    }
                    else
                    {
                        return(BadRequest("email already registered"));
                    }
                }
                else
                {
                    return(BadRequest("email format error"));
                }
            }
            else
            {
                return(BadRequest("email not found in request body"));
            }
        }