示例#1
0
        public async Task <AdminLoginOutput> AdminLogin(AdminLoginInput dto)
        {
            var output = new AdminLoginOutput {
                Result = dto.Result
            };

            if (!await this.AccountRpository.ExistedAsync(dto.Model.UserName))
            {
                output.Result.ResultCode = (int)AccountResultCode.UserNotExist;
                output.Result.Message    = "用户不存在";
                return(output);
            }

            var accounts = this.DbContext.TAccount
                           .Where(a => a.Type == AccountType.Admin)
                           .Where(a => a.Name == dto.Model.UserName)
                           .Join(this.DbContext.TAdmin, m => m.Id, f => f.AccountId, (m, f) =>
                                 new
            {
                m.Id,
                m.Password,
                m.Name,
                m.Type,
                f.JobNumber,
            }
                                 );

            var account = await accounts.FirstOrDefaultAsync();

            if (!dto.Model.Password.Equals(account.Password))
            {
                output.Result.ResultCode = (int)AccountResultCode.PasswordError;
                output.Result.Message    = "密码错误";
                return(output);
            }

            var admin = await this.AdminRpository.GetAdmin(account.Id);

            await this.AdminRpository.SetLoginInfo(account.Id, dto.LoginIP, admin);

            //写登陆日志
            var loginLog = new TAdminLoginLog
            {
                AccountId = admin.AccountId,
                LoginIp   = dto.LoginIP,
            };
            await AdminLoginLogRpository.AddAsync(loginLog);

            if (!await this.SaveChangesAsync())
            {
                return(output);
            }

            output.Result.ResultCode = (int)ResultCode.Successful;
            return(output);
        }
 /// <summary>
 /// TODO 去掉Role的硬编码
 /// </summary>
 /// <param name="userInfo"></param>
 private void SignIn(AdminLoginOutput loginResult)
 {
     if (loginResult != null && loginResult.LoginAccount != null && loginResult.LoginRole != null)
     {
         var claims = new Claim[]
         {
             new Claim(ClaimTypes.Role, loginResult.LoginRole.Key),
             //new Claim(ClaimTypes.Role,loginResult.LoginAccount.RoleId),
             new Claim(ClaimTypes.Name, loginResult.LoginAccount.UserName),
             new Claim(ClaimTypes.Sid, loginResult.LoginAccount.Id),
             new Claim(ClaimTypes.GroupSid, loginResult.LoginAccount.RoleId),
         };
         HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, new ClaimsPrincipal(new ClaimsIdentity(claims)));
     }
 }