62,051
社区成员
发帖
与我相关
我的任务
分享
/// <summary>
/// 登录:为零则表示登录成功,小于零则表示错,大于零表示有提示信息
/// </summary>
/// <param name="name"></param>
/// <param name="password"></param>
/// <param name="isPadLogin">是否从IPAD登录请求</param>
/// <param name="loginType">登录类型:0 - 管理中心,1 - 论坛后台,2 - 学院后台</param>
/// <returns></returns>
public static string Login(string name, string password, bool isPadLogin = false, int loginType = 0)
{
var service = ServiceResolver.Resolver.GetService<IBusinessService>().CommonDb(true);
if (loginType == 0 || loginType == 2)
{
password = isPadLogin ? password.ToLower()
: System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5").ToLower();
var user = exts.Administrators(name, password);
if (user == null)
{
if (isPadLogin)
user = service.Get<UserInfo>(u => u.PadLoginName == name && u.IsDeleted == false);
else
user = service.Get<UserInfo>(u => u.LoginName == name && u.IsDeleted == false);//第一次进入登录方法时,这个位置会有报错
}
// 不存在该用户名
if (user == null) { return "-1"; }
if (!user.IsEnabled) { return "-4"; }
// 密码错误
if (isPadLogin) { if (user.PadLoginPassword.ToLower() != password) return "-2"; }
else { if (user.LoginPassword.ToLower() != password) return "-2"; }
// 密码过期
// if (user.PasswordExpired <= DateTime.Now) return -3;
user.Id = new Guid(user.Id.ToString().ToLower());
// 解决问题:在同步到IPAD端后日期格式为标准的本地格式
var now = DateTime.Now;
user.LastLogin = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, DateTimeKind.Unspecified);
// 验证组织是否有效
var org = service.Get<Organization>(o => o.ID == user.OrganizationID);
if (org == null || !org.IsPublish || org.IsDeleted) return "-5";
service.SaveChanges();
//==============================================================
// 保存用户信息
SetCurrentUser(user);
//==============================================================
// 密码快要过期
// if ((user.PasswordExpired - DateTime.Now).TotalDays <= 3) { return 3; }
return loginType.ToString();
}
else { return "-1"; }
}
private static void SetCurrentUser(string name)
{
var user = ServiceResolver.Resolver.GetService<IBusinessService>().Common
.Get<UserInfo>(u => u.LoginName == name);
if (user != null) { SetCurrentUser(user); }
else
{
System.Web.Security.FormsAuthentication.SignOut();
HttpContext.Current.Response.Redirect("/Home/Login");
}
}
private static void SetCurrentUser(UserInfo user)
{
//先设置身份认证信息
System.Web.Security.FormsAuthentication.SetAuthCookie(user.LoginName, false);
LoginUser loginUser = new LoginUser();
loginUser = CloneUserToLogin(user);
//加载所有上级
List<Organization> parents = ServiceResolver.Resolver.GetService<IBusinessService>()
.Service<IOrganizationService>()
.GetOrganizationParents(loginUser.OrganizationID);
foreach (var item in parents)
{
loginUser.OrganizationIDList.Add(new Item<string, string, string>() { Key = item.TypeCode.ToString(), Value = item.ID.ToString(), Name = item.Name });
if (item.ID == user.OrganizationID) //保存用户所在组织类型
{
loginUser.OrganizationType = (OrganizationType)item.TypeCode;
}
}
//找到用户所属岗位列表。
loginUser.userJobPosition = GetUserJobPosition(loginUser.Id);
//获取用户岗位名称
if (loginUser.userJobPosition.Any())
{
loginUser.JobPositionName = loginUser.userJobPosition[0].Name;
}
//找到用户所拥有权限列表。
loginUser.JobPositionModel = GetJobPositionFunction(loginUser);
loginUser.userPermissionModule = GetPermissionModule(loginUser);
//获取用户所属组织名称
//loginUser.OrganizationName = ServiceResolver.Resolver.GetService<IBusinessService>().Common.Get<Organization>(c => c.ID == loginUser.OrganizationID).Name;
//上面是原始的代码,后来出现报错后我就进行了判空,但是有时候也还是会在下面获取对象的时候提示错误
Organization o = ServiceResolver.Resolver.GetService<IBusinessService>().Common.Get<Organization>(c => c.ID == loginUser.OrganizationID);
if (o != null)
loginUser.OrganizationName = o.Name;
else
loginUser.OrganizationName = "#####";
//保存用户信息到 Session 内
HttpContext.Current.Session[CurrentUserKey] = loginUser;
}