📄 xmlmembershipprovider.cs
字号:
/// </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 + -