Exemplo n.º 1
0
        public async Task <IActionResult> SignInAsync([FromForm] Models.AccountViewModels.LoginViewModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                Email = loginModel.Email
            };
            var result = new Models.JsonResponseModel <JWT.TokenEntity>();

            Microsoft.AspNetCore.Identity.SignInResult signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                _logger.LogInformation(1, "User logged in.");
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_apiSetting.Value.SecretKey));
                var options    = new JWT.TokenOptions
                {
                    Audience           = "SparkTodoAudience",
                    Issuer             = "SparkTodo",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                var token = new TokenProvider(options).GenerateToken(HttpContext, userInfo.Email);
                userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.UserId,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "µÇ¼³É¹¦", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü£¬ÕË»§Òѱ»Ëø¶¨", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Json(result));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> SignUpAsync([FromForm] Models.AccountViewModels.RegisterViewModel regModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                UserName       = regModel.Email,
                Email          = regModel.Email,
                EmailConfirmed = true,//ĬÈϲ»ÐèÒªÑéÖ¤ÓÊÏ䣬עÊÍÒÔÆôÓÃ
                CreatedTime    = DateTime.Now
            };
            var result       = new Models.JsonResponseModel <JWT.TokenEntity>();
            var signupResult = await _userManager.CreateAsync(userInfo, regModel.Password);

            if (signupResult.Succeeded)
            {
                _logger.LogInformation(3, "User created a new account");
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_apiSetting.Value.SecretKey));
                var options    = new JWT.TokenOptions
                {
                    Audience           = "SparkTodoAudience",
                    Issuer             = "SparkTodo",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                var token = new TokenProvider(options).GenerateToken(HttpContext, userInfo.Email);
                userInfo = await _userRepository.FetchAsync(u => u.Email == regModel.Email);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.UserId,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "×¢²á³É¹¦", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = null, Msg = "sign up failed," + String.Join(",", signupResult.Errors.Select(e => e.Description).ToArray()), Status = Models.JsonResponseStatus.ProcessFail
                };
            }
            return(Json(result));
        }