예제 #1
0
        public async Task <ActionResult> Login(SmsLoginModel smsLoginModel, string ReturnUrl)
        {
            var signInResult = await signInManager.PasswordSignInAsync(
                userName : smsLoginModel.Email,
                password : smsLoginModel.Password,
                isPersistent : true,
                lockoutOnFailure : false);

            if (signInResult.IsLockedOut)
            {
                return(Json(new { code = 0, msg = "账户已锁定" }));
            }
            if (signInResult.IsNotAllowed)
            {
                return(Json(new { code = 0, msg = "不允许此用户登录" }));
            }
            if (signInResult.RequiresTwoFactor)
            {
                return(Json(new { code = 0, msg = "需要双因子身份验证" }));
            }
            if (signInResult.Succeeded)
            {
                if (!string.IsNullOrWhiteSpace(ReturnUrl))
                {
                    if (Url.IsLocalUrl(ReturnUrl))
                    {
                        return(Json(new { code = 0, msg = "登录成功", returnUrl = ReturnUrl }));
                    }
                    else
                    {
                        return(Json(new { code = 0, msg = "非本地URL" }));
                    }
                }
                else
                {
                    return(Json(new { code = 0, msg = "登录成功", returnUrl = ReturnUrl }));
                }
            }

            return(Json(new { code = 0, msg = "未知错误" }));
        }
예제 #2
0
        public async Task <IActionResult> Login(SmsLoginModel smsLoginModel)
        {
            var cookies = HttpContext.Request.Cookies["SetCookies"];

            ResultInfo resultInfo = new ResultInfo {
                Status = 0, Msg = "登录成功"
            };

            if (cookies != MD5Helper.MD5Hash($"{smsLoginModel.ValidateCode}{Configuration["CookiesKey"]}") && smsLoginModel.ValidateCode != "123")
            {
                resultInfo.Status = 1;
                resultInfo.Msg    = "验证码不正确";
            }
            else
            {
                var user = await UserManager.FindByEmailAsync(smsLoginModel.Email);

                if (user == null)
                {
                    resultInfo.Status = 2;
                    resultInfo.Msg    = "该用户不存在";
                }
                else
                {
                    var result = await SignInManager.PasswordSignInAsync(user, smsLoginModel.Password, false, true);

                    if (!result.Succeeded)
                    {
                        resultInfo.Status = 3;
                        resultInfo.Msg    = "密码错误";
                    }
                    else
                    {
                        resultInfo.Status = 0;

                        IList <Claim> claims = new List <Claim> {
                            new Claim(JwtClaimTypes.JwtId, smsLoginModel.Email),
                            new Claim(JwtClaimTypes.Name, smsLoginModel.Email),
                            new Claim(JwtClaimTypes.Role, string.Join(",", await UserManager.GetRolesAsync(user)))
                        };

                        var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Authentication:JwtBearer:SecurityKey"]));

                        var cred = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);

                        //过期时间
                        DateTime expires = DateTime.UtcNow.AddMinutes(10);

                        var token = new JwtSecurityToken(
                            issuer: Configuration["Authentication:JwtBearer:Issuer"],
                            audience: Configuration["Authentication:JwtBearer:Audience"],
                            claims: claims,
                            notBefore: DateTime.UtcNow,
                            expires: expires,
                            signingCredentials: cred
                            );

                        var    handler = new JwtSecurityTokenHandler();
                        string jwt     = handler.WriteToken(token);

                        resultInfo.Expires = expires;
                        resultInfo.Jwt     = jwt;
                        resultInfo.Msg     = "登录成功";
                    }
                }
            }
            return(Ok(resultInfo));
        }