Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
            }
        }