/// <summary> /// 获取当前用户 /// </summary> /// <returns></returns> public static UserModel GetCurrentUser() { var cookies = HttpContext.Current.Request.Cookies; // 获取cookie var cookie = cookies.Get(FormsAuthentication.FormsCookieName); if (cookie == null) { return(null); } // 解析ticket数据 var ticket = FormsAuthentication.Decrypt(cookie.Value); LoginTicketDataModel userData = null; try { userData = JsonConvert.DeserializeObject <LoginTicketDataModel>(ticket.UserData); } catch (Exception ex) { var log = LogHelper.GetLogger(typeof(UserHelper)); log.Error("User ticket deserialized failed.", ex); return(null); } return(GetUser(userData.UserID)); }
public JsonResult Login(LoginModel model) { if (model.Username == null || string.IsNullOrEmpty(model.Username)) { return(Json(new { Code = 300, Msg = "Username is not allowed to be empty.", })); } if (model.Password == null || string.IsNullOrEmpty(model.Password)) { return(Json(new { Code = 300, Msg = "Password is not allowed to be empty.", })); } // 获取Salt var helper = new MongoHelper(); var filter = Builders <BsonDocument> .Filter.Eq("Username", model.Username); var user = helper.FindOne(Constant.UserCollectionName, filter); if (user == null) { return(Json(new { Code = 300, Msg = "The username or password is wrong.", })); } var salt = user["Salt"].ToString(); // 验证账号密码 var password = MD5Helper.Encrypt(model.Password + salt); var filter1 = Builders <BsonDocument> .Filter.Eq("Password", password); filter = Builders <BsonDocument> .Filter.And(filter, filter1); user = helper.FindOne(Constant.UserCollectionName, filter); if (user == null) { return(Json(new { Code = 300, Msg = "The username or password is wrong.", })); } var id = user["ID"].ToString(); // 票据数据 var ticketData = new LoginTicketDataModel { UserID = id, }; // 将用户信息写入cookie var cookie = FormsAuthentication.GetAuthCookie(model.Username, false); var ticket = FormsAuthentication.Decrypt(cookie.Value); var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration, ticket.IsPersistent, JsonConvert.SerializeObject(ticketData)); // 将用户ID写入ticket cookie.Value = FormsAuthentication.Encrypt(newTicket); cookie.Expires = DateTime.Now.AddMinutes(ConfigHelper.Expires); HttpContext.Current.Response.Cookies.Add(cookie); return(Json(new { Code = 200, Msg = "Login successfully!", Data = new { Username = user["Username"].ToString(), Name = user["Name"].ToString() } })); }
public static UserModel GetCurrentUser() { var cookies = HttpContext.Current.Request.Cookies; // 获取cookie var cookie = cookies.Get(FormsAuthentication.FormsCookieName); if (cookie == null) { return(null); } // 解析ticket数据 var ticket = FormsAuthentication.Decrypt(cookie.Value); LoginTicketDataModel userData = null; try { userData = JsonConvert.DeserializeObject <LoginTicketDataModel>(ticket.UserData); } catch (Exception ex) { var log = LogHelper.GetLogger(typeof(UserHelper)); log.Error("User ticket deserialized failed.", ex); return(null); } // 获取用户信息 ObjectId objectId; if (!ObjectId.TryParse(userData.UserID, out objectId)) { var log = LogHelper.GetLogger(typeof(UserHelper)); log.Error("UserID parse failed."); return(null); } var mongo = new MongoHelper(); var filter = Builders <BsonDocument> .Filter.Eq("ID", objectId); var doc = mongo.FindOne(Constant.UserCollectionName, filter); if (doc == null) { return(null); } return(new UserModel { ID = doc["ID"].ToString(), Username = doc["Username"].ToString(), Name = doc["Name"].ToString(), Password = doc["Password"].ToString(), Gender = doc["Gender"].ToInt32(), Phone = doc["Phone"].ToString(), Email = doc["Email"].ToString(), QQ = doc["QQ"].ToString(), CreateTime = doc["CreateTime"].ToLocalTime(), UpdateTime = doc["UpdateTime"].ToLocalTime(), Salt = doc["Salt"].ToString(), Status = doc["Status"].ToInt32() }); }
/// <summary> /// 获取当前用户 /// </summary> /// <returns></returns> public static UserModel GetCurrentUser() { var cookies = HttpContext.Current.Request.Cookies; // 获取cookie var cookie = cookies.Get(FormsAuthentication.FormsCookieName); if (cookie == null) { return(null); } // 解析ticket数据 var ticket = FormsAuthentication.Decrypt(cookie.Value); LoginTicketDataModel userData = null; try { userData = JsonConvert.DeserializeObject <LoginTicketDataModel>(ticket.UserData); } catch (Exception ex) { var log = LogHelper.GetLogger(typeof(UserHelper)); log.Error("User ticket deserialized failed.", ex); return(null); } // 获取用户信息 ObjectId objectId; if (!ObjectId.TryParse(userData.UserID, out objectId)) { var log = LogHelper.GetLogger(typeof(UserHelper)); log.Error("UserID parse failed."); return(null); } var mongo = new MongoHelper(); var filter = Builders <BsonDocument> .Filter.Eq("ID", objectId); var doc = mongo.FindOne(Constant.UserCollectionName, filter); if (doc == null) { return(null); } // 获取角色和权限信息 var roleID = ""; var roleName = ""; var operatingAuthorities = new List <String>(); if (doc.Contains("RoleID") && ObjectId.TryParse(doc["RoleID"].ToString(), out objectId)) { filter = Builders <BsonDocument> .Filter.Eq("ID", objectId); var role = mongo.FindOne(Constant.RoleCollectionName, filter); if (role != null) { roleID = role["ID"].ToString(); roleName = role["Name"].ToString(); filter = Builders <BsonDocument> .Filter.Eq("RoleID", roleID); var authorities = mongo.FindMany(Constant.OperatingAuthorityCollectionName, filter).ToList(); foreach (var authority in authorities) { operatingAuthorities.Add(authority["AuthorityID"].ToString()); } } } return(new UserModel { ID = doc["ID"].ToString(), Username = doc["Username"].ToString(), Name = doc["Name"].ToString(), Password = doc["Password"].ToString(), RoleID = roleID, RoleName = roleName, OperatingAuthorities = operatingAuthorities, Gender = doc["Gender"].ToInt32(), Phone = doc["Phone"].ToString(), Email = doc["Email"].ToString(), QQ = doc["QQ"].ToString(), CreateTime = doc["CreateTime"].ToLocalTime(), UpdateTime = doc["UpdateTime"].ToLocalTime(), Salt = doc["Salt"].ToString(), Status = doc["Status"].ToInt32(), }); }