using Core.Web.WebHelper; using Core.Web.WebHelper.UserRight; using CRM.Core.BLL.Base; using CRM.Core.BLL.Util; using CRM.Core.Common.WebHelper; using CRM.Core.DTO; using CRM.Core.Model.Entity; using CRM.Core.Model.Enum; using NLog.Time; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.Security; using WX.CRM.Common; using static CRM.Core.Model.QueryModels.SSORequest; namespace Core.Web.Controllers { public class AccountController : Controller { CACHE_BL _cacheQ = new CACHE_BL(); BAS_INNERUSER_BL user_dal = new BAS_INNERUSER_BL(); // GET: Account public ActionResult LogOn() { return View(); } [HttpGet] public ActionResult LogOn(string returnUrl) { this.ViewBag.ReturnUrl = returnUrl; int int_error = _cacheQ.GetValue_Parameter(Parameter.Sys_Environment_LogOn).GetInt(1); if (Session["LogOnErrorNum"] != null && (int)Session["LogOnErrorNum"] >= int_error) { ViewBag.ShowSnCode = true; } return this.RedirectByAuthentication(returnUrl); } [HttpPost] public ActionResult LogOn(BAS_INNERUSER user, string returnUrl, string RememberMe) { this.ViewBag.ReturnUrl = returnUrl; try { //ModelState.Clear(); // ModelState.Remove("map_PASSWORD"); //user.map_CPASSWORD = user.map_PASSWORD; ModelState.Remove("map_PASSWORD3"); ModelState.Remove("map_PASSWORD2"); ModelState.Remove("map_PASSWORD"); ModelState.Remove("map_CPASSWORD"); ModelState.Remove("map_CPASSWORD2"); ModelState.Remove("map_SnCode"); //if (ModelState.IsValid) //{ if (Session["LogOnErrorNum"] != null && (Session["ValidateCode"] == null || user.map_SnCode == null || user.map_SnCode.ToUpper() != Session["ValidateCode"].ToString())) { this.ViewBag.LogOnError = "验证码错误!"; } else { //Bas_inneruserModel getuser = null; string error = string.Empty; int userId = 0; bool success = this.user_dal.ValidateUser(user.EID, user.PASSWORD, out error, out userId); if (success) { Session["LogOnErrorNum"] = null; //remenberMe(user.EID, user.PASSWORD, RememberMe); return RedirectToMain(userId, user.EID, returnUrl, user.PASSWORD); } else { if (Session["LogOnErrorNum"] == null) Session["LogOnErrorNum"] = 1; else { Session["LogOnErrorNum"] = (int)Session["LogOnErrorNum"] + 1; } this.ViewBag.LogOnError = error; } } int int_error = _cacheQ.GetValue_Parameter(Parameter.Sys_Environment_LogOn).GetInt(1);//出错多少次就 需要验证码 if (Session["LogOnErrorNum"] != null && (int)Session["LogOnErrorNum"] >= int_error) { ViewBag.ShowSnCode = true; } Session["ValidateCode"] = null; //} //else //{ // this.ViewBag.LogOnError = "验证不通过"; //} } catch (Exception ex) { this.ViewBag.LogOnError = ex.Message; LogHelper.Error("AccountController:" + ex.ToString()); } return View(user); } private ActionResult RedirectToMain(int userId, int EID, string returnUrl, string password) { string[] userrights = { }; LoginHelper login = new LoginHelper(); decimal logPkId = login.CreateLoginLog(userId, EID, 0); string userinfo = login.setUserinfo(userId, EID, null, logPkId, ref userrights);//设置登陆这的所有信息 string encTicket = login.SetCookie(userId.ToString(), false, userinfo); var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket); cookie.Expires = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day).AddDays(1); this.Response.Cookies.Add(cookie); //写入认证信息 //GenericPrincipal prin = new GenericPrincipal(this.HttpContext.User.Identity, userinfo.userRightId); //this.HttpContext.User = prin; if (userrights != null && userrights.Count() > 0) { //存入缓存 string userInfoCache = "Cache_UserInfo_" + userId.ToString(); CacheHelper.Set(userInfoCache, userrights); int checkpwd = Utility.PasswordStrength(password); if (checkpwd > 0) { return Redirect("/Base/Account/simplePwd?type=" + checkpwd); } else { if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) { return Redirect(returnUrl); } else { return this.RedirectToAction("Index", "Home"); } } } else { return this.RedirectToAction("Index", "Home"); //return this.RedirectToAction("NoRightView", "Error"); } } [NonAction] private ActionResult RedirectByAuthentication(string returnUrl) { if (this.HttpContext.Request.IsAuthenticated) { // 如果已经登录 if (null != returnUrl) { // 跳转到前一个访问的页面 return this.Redirect(returnUrl); } else { // 跳转到首页 return this.RedirectToAction("Index", "Home"); } } else { BAS_INNERUSER user = null; return View(user); } } /// /// 随机生成验证码 /// /// public ActionResult GetValidateCode() { Session["ValidateCode"] = null; SnCodeHelper code = new SnCodeHelper(); //生成随机数字 string codeStr = Utility.CreateRandomSatl(5); //保存在session 用于验证正确用 Session["ValidateCode"] = codeStr.ToUpper(); //生成图片 byte[] bytes = code.CreateValidateImage(codeStr); return File(bytes, @"image/gif"); } [HttpGet] // [NonAction] public ActionResult LogOff() { var isso = true; var ssoUrl = System.Configuration.ConfigurationManager.AppSettings["SSOUrl"]; if (!string.IsNullOrEmpty(ssoUrl)) { isso = SSOLogOff(); } string cacheKey = "Cache_UserInfo_" + this.HttpContext.User.Identity.Name; CacheHelper.Remove(cacheKey); Session["AuthorizeSession"] = null; FormsAuthentication.SignOut(); var Account = "Account"; if (!string.IsNullOrEmpty(ssoUrl)&& isso) Account = "AccountSSO"; return RedirectToAction("LogOn", Account); } public bool SSOLogOff() { var authToken_cookie = HttpContext.Request.Cookies.Get("AuthToken"); if (authToken_cookie != null) { try { var authToken = authToken_cookie.Value; var ssoUrl = System.Configuration.ConfigurationManager.AppSettings["SSOUrl"]; var appid = System.Configuration.ConfigurationManager.AppSettings["appid"]; var url = $"{ssoUrl}/v1/api/open/sso/logout"; var headers = new Dictionary(); headers.Add("X-App-ID", appid); headers.Add("X-Token", authToken); if (!string.IsNullOrEmpty(ssoUrl)) { var result = Utility.PostAjaxData(url, headers, System.Text.Encoding.UTF8); if (!string.IsNullOrEmpty(result)) { var response = JsonHelper.JsonDivertToObj>(result); if (response.Ret == 0) { this.Response.Cookies["AuthToken"].Expires = DateTime.Now.AddDays(-1); // this.Response.Cookies.Remove("AuthToken"); Session["AuthToken"] = null; return true; } } } } catch (Exception ex) { LogHelper.Error(ex); } } return true; } public ActionResult UnAuthorized(string type) { if (string.IsNullOrEmpty(type)) { return View(); } else { retMsg ret = new retMsg { result = false, retcode = 500, retmsg = "抱歉,您没有权限访问!" }; return Json(ret, JsonRequestBehavior.AllowGet); } } } }