⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmlmembershipprovider.cs

📁 个人博客系统
💻 CS
📖 第 1 页 / 共 2 页
字号:
        /// </summary>
        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
          XmlDocument doc = new XmlDocument();
          doc.Load(_XmlFileName);

          XmlNode xmlUserRoot = doc.CreateElement("User");
          XmlNode xmlUserName = doc.CreateElement("UserName");
          XmlNode xmlPassword = doc.CreateElement("Password");
          XmlNode xmlEmail = doc.CreateElement("Email");
          XmlNode xmlLastLoginTime = doc.CreateElement("LastLoginTime");

          xmlUserName.InnerText = username;
          xmlPassword.InnerText = password;
          xmlEmail.InnerText = email;
          xmlLastLoginTime.InnerText = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);

          xmlUserRoot.AppendChild(xmlUserName);
          xmlUserRoot.AppendChild(xmlPassword);
          xmlUserRoot.AppendChild(xmlEmail);
          xmlUserRoot.AppendChild(xmlLastLoginTime);

          doc.SelectSingleNode("Users").AppendChild(xmlUserRoot);
          doc.Save(_XmlFileName);

          status = MembershipCreateStatus.Success;
          MembershipUser user = new MembershipUser(Name, username, username, email, passwordQuestion, password, isApproved, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.MaxValue);
          _Users.Add(username, user);
          return user;
        }

        /// <summary>
        /// Deletes the user from the XML file and 
        /// removes him/her from the internal cache.
        /// </summary>
        public override bool DeleteUser(string username, bool deleteAllRelatedData)
        {
          XmlDocument doc = new XmlDocument();
          doc.Load(_XmlFileName);

          foreach (XmlNode node in doc.GetElementsByTagName("User"))
          {
            if (node.ChildNodes[0].InnerText.Equals(username, StringComparison.OrdinalIgnoreCase))
            {
              doc.SelectSingleNode("Users").RemoveChild(node);
              doc.Save(_XmlFileName);
              _Users.Remove(username);
              return true;
            }
          }

          return false;
        }

        /// <summary>
        /// Get a user based on the username parameter.
        /// the userIsOnline parameter is ignored.
        /// </summary>
        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
        {
          if (providerUserKey == null)
            throw new ArgumentNullException("providerUserKey");
          
          XmlDocument doc = new XmlDocument();
          doc.Load(_XmlFileName);

          foreach (XmlNode node in doc.SelectNodes("//User"))
          {
            if (node.ChildNodes[0].InnerText.Equals(providerUserKey.ToString(), StringComparison.OrdinalIgnoreCase))
            {
              string userName = node.ChildNodes[0].InnerText;
              string password = node.ChildNodes[1].InnerText;
              string email = node.ChildNodes[2].InnerText;
              DateTime lastLoginTime = DateTime.Parse(node.ChildNodes[3].InnerText, CultureInfo.InvariantCulture);
              return new MembershipUser(Name, providerUserKey.ToString(), providerUserKey, email, string.Empty, password, true, false, DateTime.Now, lastLoginTime, DateTime.Now, DateTime.Now, DateTime.MaxValue);
            }
          }

          return default(MembershipUser);
        }

        /// <summary>
        /// Retrieves a username based on a matching email.
        /// </summary>
        public override string GetUserNameByEmail(string email)
        {
          if (email == null)
            throw new ArgumentNullException("email");

          XmlDocument doc = new XmlDocument();
          doc.Load(_XmlFileName);

          foreach (XmlNode node in doc.GetElementsByTagName("User"))
          {
            if (node.ChildNodes[2].InnerText.Equals(email.Trim(), StringComparison.OrdinalIgnoreCase))
            {
              return node.ChildNodes[0].InnerText;
            }
          }

          return null;
        }

        /// <summary>
        /// Updates a user. The username will not be changed.
        /// </summary>
        public override void UpdateUser(MembershipUser user)
        {
          XmlDocument doc = new XmlDocument();
          doc.Load(_XmlFileName);

          foreach (XmlNode node in doc.GetElementsByTagName("User"))
          {
            if (node.ChildNodes[0].InnerText.Equals(user.UserName, StringComparison.OrdinalIgnoreCase))
            {
              if (user.Comment.Length > 30)
              {
                node.ChildNodes[1].InnerText = user.Comment;
              }
              node.ChildNodes[2].InnerText = user.Email;
              node.ChildNodes[3].InnerText = user.LastLoginDate.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
              doc.Save(_XmlFileName);
              _Users[user.UserName] = user;
            }
          }
        }

        #endregion

        #region Helper methods

        /// <summary>
        /// Builds the internal cache of users.
        /// </summary>
        private void ReadMembershipDataStore()
        {
          lock (this)
          {
            if (_Users == null)
            {
              _Users = new Dictionary<string, MembershipUser>(16, StringComparer.InvariantCultureIgnoreCase);
              XmlDocument doc = new XmlDocument();
              doc.Load(_XmlFileName);
              XmlNodeList nodes = doc.GetElementsByTagName("User");

              foreach (XmlNode node in nodes)
              {
                MembershipUser user = new MembershipUser(
                    Name,                       // Provider name
                    node["UserName"].InnerText, // Username
                    node["UserName"].InnerText, // providerUserKey
                    node["Email"].InnerText,    // Email
                    String.Empty,               // passwordQuestion
                    node["Password"].InnerText, // Comment
                    true,                       // isApproved
                    false,                      // isLockedOut
                    DateTime.Now,               // creationDate
                    DateTime.Parse(node["LastLoginTime"].InnerText, CultureInfo.InvariantCulture), // lastLoginDate
                    DateTime.Now,               // lastActivityDate
                    DateTime.Now, // lastPasswordChangedDate
                    new DateTime(1980, 1, 1)    // lastLockoutDate
                );

                _Users.Add(user.UserName, user);
              }
            }
          }
        }

        ///// <summary>
        ///// Encrypts a string using the SHA256 algorithm.
        ///// </summary>
        //private static string Encrypt(string plainMessage)
        //{
        //  byte[] data = Encoding.UTF8.GetBytes(plainMessage);
        //  using (HashAlgorithm sha = new SHA256Managed())
        //  {
        //    byte[] encryptedBytes = sha.TransformFinalBlock(data, 0, data.Length);
        //    return Convert.ToBase64String(sha.Hash);
        //  }
        //}

        #endregion

        #region Unsupported methods

        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="answer"></param>
        /// <returns></returns>
        public override string ResetPassword(string username, string answer)
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="userName"></param>
        /// <returns></returns>
        public override bool UnlockUser(string userName)
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="emailToMatch"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalRecords"></param>
        /// <returns></returns>
        public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="usernameToMatch"></param>
        /// <param name="pageIndex"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalRecords"></param>
        /// <returns></returns>
        public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public override int GetNumberOfUsersOnline()
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        /// <param name="newPasswordQuestion"></param>
        /// <param name="newPasswordAnswer"></param>
        /// <returns></returns>
        public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
        {
          throw new NotSupportedException();
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="username"></param>
        /// <param name="answer"></param>
        /// <returns></returns>
        public override string GetPassword(string username, string answer)
        {
          throw new NotSupportedException();
        }

        #endregion

    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -