/// <summary> /// 生成token /// </summary> /// <param name="user"></param> /// <param name="ip"></param> /// <param name="did"></param> /// <param name="platform"></param> /// <param name="expireTime"></param> /// <param name="fromCode"></param> /// <returns></returns> private CredentialsExt MakeToken(UserDetail user, string ip, string did, string platform, DateTime?expireTime, string fromCode) { string token = string.Empty; CredentialsExt credentials = new CredentialsExt(); credentials.myPhoto = user.myPhoto; credentials.fullname = user.fullname; //生成token token = Guid.NewGuid().ToString("N"); //登录的基本信息 credentials.UserId = user.id.ToString(); credentials.UserName = user.loginname; credentials.NickName = user.name + " " + user.surname; credentials.RealName = user.name + " " + user.surname; //设备号 credentials.Did = did; //本次登录的令牌 credentials.accesstoken = token; //本次登录的用户IP credentials.UserIp = ip; //服务器IP credentials.HostIp = WebUtils.GetHostIp(); //登录的平台 credentials.Platform = platform; //本次登录的机构 credentials.OrgId = user.discriminator; credentials.OrgCode = user.discriminator; credentials.OrgName = user.discriminator; //本次登录的部门 credentials.DeptId = string.Empty; credentials.DeptCode = string.Empty; credentials.DeptName = string.Empty; credentials.FromCode = string.Empty; credentials.FromName = string.Empty; if (expireTime.HasValue && expireTime.Value > DateTime.Now) { credentials.ExpireTime = expireTime.Value; } else { credentials.ExpireTime = DateTime.Now.AddDays(1); } credentials.Enabled = true; credentials.CreateTime = DateTime.Now; credentials.LastValidTime = DateTime.Now; //插入登录凭据 _credentialsRepository.Add(credentials); return(credentials); }
/// <summary> /// 本地登录逻辑 /// </summary> /// <param name="userInfo"></param> /// <param name="password"></param> /// <param name="msg"></param> /// <param name="failCount"></param> /// <returns></returns> private bool DoLogin(UserDetail userInfo, string password, ref string msg) { msg = CheckUserInfo(userInfo, password); if (!string.IsNullOrWhiteSpace(msg)) { return(false); } // token 通过 credentials.accesstoken 返回 CredentialsExt credentials = MakeToken(userInfo, userIp, string.Empty, "pc", DateTime.Now.AddDays(1), Constants.USER_TYPE_Cloud); if (credentials != null) { //通过token踢掉所有同用户名的其他在线用户 _credentialsRepository.KickCredentialsByToken(credentials.accesstoken); ClearSession(); ClearCookies(); // 获取角色 credentials.Roles = GetRoles(credentials); string userData = JsonConvert.SerializeObject(credentials); DateTime expiration = DateTime.Now.Add(FormsAuthentication.Timeout); FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, credentials.UserName, DateTime.Now, expiration, true, userData, FormsAuthentication.FormsCookiePath); //IPrincipal principal = HttpContext.Current.User; //principal.Identity = //FormsIdentity formsIdentity = new FormsIdentity(ticket); //HttpContext.Current.User.Identity = formsIdentity; HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket)) { HttpOnly = true, Expires = expiration }; HttpContext.Current.Session[Constants.IDENDITY_SESSION_NAME] = credentials; HttpContext.Current.Response.Cookies.Remove(cookie.Name); HttpContext.Current.Response.Cookies.Add(cookie); return(true); } else { return(false); } }