扩展membership可能是很多刚接触2.0的朋友的第一个问题,我搜了很多这方面的资料,但感觉都不是说的特别仔细,所以在此请教一下,希望做过这方面东西的朋友可以把代码共享出来让大家看看啊...给我们解决一下这个第一步,谢谢!有两个小问题.
1: 数据库是修改微软的那个表还是做一个关联表?
2: 听说是写一个新类继承MemberShip类,有没有这方面的例子?
1: 数据库是修改微软的那个表还是做一个关联表?
2: 听说是写一个新类继承MemberShip类,有没有这方面的例子?
调试欢乐多
1. 比如我要给会员资料添加一个地址信息的字段,我需要修改那份数据库里面的表和存储过程吗?
2. 我写一个新类继承MembershipProvider,是不是需要override里面的所有方法啊,还是只需要覆盖其中的几个?
谢谢谢谢!!!!
一:profile
二:自己建立一个memberinfo表,来进行扩充,但是这时候的查询要自己写了。
一般写成类,使用起来也是很方便的.
1: profile的话,数据好象都是串行化的存在aspnet_Profile这个表中,这样好么?
2: 自己建立一个memberinfo表,需要建立一个类来继承Membership吧?有没有写好的代码供我们学习一下啊?谢谢!!
using System.Configuration;
using System;
using System.Configuration;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Security.Principal;
using System.Threading;
using System.Web;[PermissionSet(SecurityAction.LinkDemand, XML = "<PermissionSet class=\"System.Security.PermissionSet\"\r\n version=\"1\">\r\n <IPermission class=\"System.Web.AspNetHostingPermission, System, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089\"\r\n version=\"1\"\r\n Level=\"Minimal\"/>\r\n</PermissionSet>\r\n")]
public sealed class Membership
{
public static event MembershipValidatePasswordEventHandler ValidatingPassword
{
add
{
Membership.Provider.ValidatingPassword += value;
}
remove
{
Membership.Provider.ValidatingPassword -= value;
}
} static Membership()
{
Membership.punctuations = "!@#$%^&*()_-+=[{]};:>|./?".ToCharArray();
Membership.s_UserIsOnlineTimeWindow = 15;
Membership.s_lock = new object();
Membership.s_Initialized = false;
Membership.s_InitializeException = null;
} public static MembershipUser CreateUser(string username, string password)
{
return Membership.CreateUser(username, password, null);
} public static MembershipUser CreateUser(string username, string password, string email)
{
MembershipCreateStatus status1;
MembershipUser user1 = Membership.CreateUser(username, password, email, null, null, true, out status1);
if (user1 == null)
{
throw new MembershipCreateUserException(status1);
}
return user1;
}
{
return Membership.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, null, out status);
} public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
if (!SecUtility.ValidateParameter(ref username, true, true, true, 0))
{
status = MembershipCreateStatus.InvalidUserName;
return null;
}
if (!SecUtility.ValidateParameter(ref password, 0))
{
status = MembershipCreateStatus.InvalidPassword;
return null;
}
if (!SecUtility.ValidateParameter(ref email, false, false, false, 0))
{
status = MembershipCreateStatus.InvalidEmail;
return null;
}
if (!SecUtility.ValidateParameter(ref passwordQuestion, false, true, false, 0))
{
status = MembershipCreateStatus.InvalidQuestion;
return null;
}
if (!SecUtility.ValidateParameter(ref passwordAnswer, false, true, false, 0))
{
status = MembershipCreateStatus.InvalidAnswer;
return null;
}
return Membership.Provider.CreateUser(username, password, email, passwordQuestion, passwordAnswer, isApproved, providerUserKey, out status);
} public static bool DeleteUser(string username)
{
SecUtility.CheckParameter(ref username, true, true, true, 0, "username");
return Membership.Provider.DeleteUser(username, true);
} public static bool DeleteUser(string username, bool deleteAllRelatedData)
{
SecUtility.CheckParameter(ref username, true, true, true, 0, "username");
return Membership.Provider.DeleteUser(username, deleteAllRelatedData);
} public static MembershipUserCollection FindUsersByEmail(string emailToMatch)
{
SecUtility.CheckParameter(ref emailToMatch, false, false, false, 0, "emailToMatch");
int num1 = 0;
return Membership.FindUsersByEmail(emailToMatch, 0, 0x7fffffff, out num1);
} public static MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
{
SecUtility.CheckParameter(ref emailToMatch, false, false, false, 0, "emailToMatch");
if (pageIndex < 0)
{
throw new ArgumentException("PageIndex is bad.", "pageIndex");
}
if (pageSize < 1)
{
throw new ArgumentException("PageSize is bad.", "pageSize");
}
return Membership.Provider.FindUsersByEmail(emailToMatch, pageIndex, pageSize, out totalRecords);
} public static MembershipUserCollection FindUsersByName(string usernameToMatch)
{
SecUtility.CheckParameter(ref usernameToMatch, true, true, false, 0, "usernameToMatch");
int num1 = 0;
return Membership.Provider.FindUsersByName(usernameToMatch, 0, 0x7fffffff, out num1);
} public static MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
{
SecUtility.CheckParameter(ref usernameToMatch, true, true, false, 0, "usernameToMatch");
if (pageIndex < 0)
{
throw new ArgumentException("PageIndex is bad", "pageIndex");
}
if (pageSize < 1)
{
throw new ArgumentException("PageSize is bad", "pageSize");
}
return Membership.Provider.FindUsersByName(usernameToMatch, pageIndex, pageSize, out totalRecords);
} public static string GeneratePassword(int length, int numberOfNonAlphanumericCharacters)
{
if ((length < 1) || (length > 0x80))
{
throw new ArgumentException("Password length specified must be between 1 and 128 characters.");
}
if ((numberOfNonAlphanumericCharacters > length) || (numberOfNonAlphanumericCharacters < 0))
{
throw new ArgumentException("The value specified in parameter numberOfNonAlphanumericCharacters should be in the range from zero to the value specified in the password length parameter.");
}
while (true)
{
int num1;
byte[] buffer1 = new byte[length];
char[] chArray1 = new char[length];
int num2 = 0;
new RNGCryptoServiceProvider().GetBytes(buffer1);
for (int num3 = 0; num3 < length; num3++)
{
int num4 = buffer1[num3] % 0x57;
if (num4 < 10)
{
chArray1[num3] = (char)((ushort)(0x30 + num4));
}
else if (num4 < 0x24)
{
chArray1[num3] = (char)((ushort)((0x41 + num4) - 10));
}
else if (num4 < 0x3e)
{
chArray1[num3] = (char)((ushort)((0x61 + num4) - 0x24));
}
else
{
chArray1[num3] = Membership.punctuations[num4 - 0x3e];
num2++;
}
}
if (num2 < numberOfNonAlphanumericCharacters)
{
Random random1 = new Random();
for (int num5 = 0; num5 < (numberOfNonAlphanumericCharacters - num2); num5++)
{
int num6;
do
{
num6 = random1.Next(0, length);
}
while (!char.IsLetterOrDigit(chArray1[num6]));
chArray1[num6] = Membership.punctuations[random1.Next(0, Membership.punctuations.Length)];
}
}
string text1 = new string(chArray1);
if (!Microsoft.ScalableHosting.Security.CrossSiteScriptingValidation.IsDangerousString(text1, out num1))
{
return text1;
}
}
}
{
int num1 = 0;
return Membership.GetAllUsers(0, 0x7fffffff, out num1);
} public static MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
{
if (pageIndex < 0)
{
throw new ArgumentException("The pageIndex must be greater than or equal to zero.", "pageIndex");
}
if (pageSize < 1)
{
throw new ArgumentException("The pageSize must be greater than zero.", "pageSize");
}
return Membership.Provider.GetAllUsers(pageIndex, pageSize, out totalRecords);
} private static string GetCurrentUserName()
{
HttpContext context1 = HttpContext.Current;
if (context1 != null)
{
return context1.User.Identity.Name;
}
IPrincipal principal1 = Thread.CurrentPrincipal;
if ((principal1 != null) && (principal1.Identity != null))
{
return principal1.Identity.Name;
}
return string.Empty;
} public static int GetNumberOfUsersOnline()
{
return Membership.Provider.GetNumberOfUsersOnline();
} public static MembershipUser GetUser()
{
return Membership.GetUser(Membership.GetCurrentUserName(), true);
} public static MembershipUser GetUser(bool userIsOnline)
{
return Membership.GetUser(Membership.GetCurrentUserName(), userIsOnline);
} public static MembershipUser GetUser(object providerUserKey)
{
return Membership.GetUser(providerUserKey, false);
} public static MembershipUser GetUser(string username)
{
return Membership.GetUser(username, false);
} public static MembershipUser GetUser(object providerUserKey, bool userIsOnline)
{
if (providerUserKey == null)
{
throw new ArgumentNullException("providerUserKey");
}
return Membership.Provider.GetUser(providerUserKey, userIsOnline);
} public static MembershipUser GetUser(string username, bool userIsOnline)
{
SecUtility.CheckParameter(ref username, true, false, true, 0, "username");
return Membership.Provider.GetUser(username, userIsOnline);
} public static string GetUserNameByEmail(string emailToMatch)
{
SecUtility.CheckParameter(ref emailToMatch, false, false, false, 0, "emailToMatch");
return Membership.Provider.GetUserNameByEmail(emailToMatch);
} private static void Initialize()
{
if (Membership.s_Initialized)
{
if (Membership.s_InitializeException != null)
{
throw Membership.s_InitializeException;
}
}
else
{
if (Membership.s_InitializeException != null)
{
throw Membership.s_InitializeException;
}
lock (Membership.s_lock)
{
if (Membership.s_Initialized)
{
if (Membership.s_InitializeException != null)
{
throw Membership.s_InitializeException;
}
}
else
{
try
{
MembershipConfig config1 = ConfigurationSettings.GetConfig("memberrolesprototype/membership") as MembershipConfig;
if (config1 == null)
{
throw new Exception("Unable to get Membership config");
}
if (config1.Provider == null)
{
throw new Exception("Membership Provider is null");
}
Membership.s_Provider = config1.Provider;
Membership.s_UserIsOnlineTimeWindow = config1.UserIsOnlineTimeWindow;
string text1 = config1.HashAlgorithmType;
if ((text1 == null) || (text1.Length == 0))
{
Membership.s_HashAlgorithmFromConfig = false;
Membership.s_HashAlgorithmType = "SHA1";
if (MachineKey.ValidationMode == MachineKeyValidationMode.MD5)
{
Membership.s_HashAlgorithmType = "MD5";
}
}
else
{
Membership.s_HashAlgorithmType = text1;
Membership.s_HashAlgorithmFromConfig = true;
}
}
catch (Exception exception1)
{
Membership.s_InitializeException = exception1;
throw;
}
Membership.s_Initialized = true;
}
}
}
} public static void UpdateUser(MembershipUser user)
{
if (user == null)
{
throw new ArgumentNullException("user");
}
user.Update();
}