/// <summary>登录</summary> /// <param name="name"></param> /// <param name="password"></param> /// <param name="remember">是否记住密码</param> /// <returns></returns> public override IManageUser Login(String name, String password, Boolean remember) { //var user = UserX.Login(name, password, rememberme); UserX user; try { // 用户登录,依次支持用户名、邮箱、手机、编码 var account = name.Trim(); user = UserX.FindByName(account); if (user == null && account.Contains("@")) { user = UserX.FindByMail(account); } if (user == null && account.ToLong() > 0) { user = UserX.FindByMobile(account); } if (user == null) { user = UserX.FindByCode(account); } if (user == null) { throw new EntityException("帐号{0}不存在!", account); } if (!user.Enable) { throw new EntityException("账号{0}被禁用!", account); } // 数据库为空密码,任何密码均可登录 if (!user.Password.IsNullOrEmpty()) { var ss = password.Split(':'); if (ss.Length <= 1) { if (!password.MD5().EqualIgnoreCase(user.Password)) { throw new EntityException("密码不正确!"); } } else { var salt = ss[1]; var pass = (user.Password.ToLower() + salt).MD5(); if (!ss[0].EqualIgnoreCase(pass)) { throw new EntityException("密码不正确!"); } } } // 保存登录信息 user.Logins++; user.LastLogin = DateTime.Now; user.LastLoginIP = UserHost; user.Update(); UserX.WriteLog("登录", true, $"用户[{user}]使用[{name}]登录成功"); } catch (Exception ex) { UserX.WriteLog("登录", false, name + "登录失败!" + ex.Message); throw; } Current = user; // 过期时间 var set = Setting.Current; var expire = TimeSpan.FromMinutes(0); if (remember && user != null) { expire = TimeSpan.FromDays(365); } else { if (set.SessionTimeout > 0) { expire = TimeSpan.FromSeconds(set.SessionTimeout); } } // 保存Cookie var context = Context?.HttpContext; this.SaveCookie(user, expire, context); return(user); }