コード例 #1
0
        public async Task <ApiResult <TokenInfoViewModel> > Login(string name = "", string pwd = "")
        {
            var r = new ApiResult <TokenInfoViewModel>();

            try
            {
                if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(pwd))
                {
                    r.status = 400;
                    r.msg    = "账号或密码不能为空!";
                    return(r);
                }
                var user = await _userServices.GetEntity(t => t.UserName.Equals(name) && t.Password.Equals(MD5Helper.MD5Encrypt32(pwd)));

                if (user != null)
                {
                    var userRole = await _roleServices.GetList(_ => _.UserID == user.Id);

                    var role = string.Empty;
                    if (userRole != null && userRole.Any())
                    {
                        role = string.Join(",", userRole.Select(_ => _.RoleID).Distinct());
                    }
                    //创建声明数组
                    var claims = new Claim[] {
                        new Claim("uid", user.Id.ToString()),
                        new Claim(ClaimTypes.Name, user.UserName),
                        new Claim(ClaimTypes.Role, role),
                        new Claim(JwtRegisteredClaimNames.Email, user.Email)
                    };
                    var responseJson = JwtToken.BuildJwtToken(claims);
                    if (responseJson != null)
                    {
                        r.status = 200;
                        r.msg    = "登录成功!";
                        r.data   = responseJson;
                        new AuthHelper(_accessor, _redis).SaveCurrSessionAndUserRole(responseJson, new AuthModel()
                        {
                            UserID = user.Id, UserName = user.UserName, RoleIDs = userRole?.Select(_ => _.Id).Distinct().ToList() ?? new List <int>()
                        });
                    }
                }
                else
                {
                    r.status = 401;
                    r.msg    = "账号或密码错误!";
                }
            }
            catch (Exception ex)
            {
                r.status = 500;
                r.msg    = ex.Message;
            }
            return(r);
        }