扩展membership可能是很多刚接触2.0的朋友的第一个问题,我搜了很多这方面的资料,但感觉都不是说的特别仔细,所以在此请教一下,希望做过这方面东西的朋友可以把代码共享出来让大家看看啊...给我们解决一下这个第一步,谢谢!有两个小问题.
1: 数据库是修改微软的那个表还是做一个关联表?
2: 听说是写一个新类继承MemberShip类,有没有这方面的例子?

解决方案 »

  1.   

    昨天我找了那个membership provider. 我还有两个小问题要问一下: 
    1. 比如我要给会员资料添加一个地址信息的字段,我需要修改那份数据库里面的表和存储过程吗? 
    2. 我写一个新类继承MembershipProvider,是不是需要override里面的所有方法啊,还是只需要覆盖其中的几个? 
    谢谢谢谢!!!!
      

  2.   

    我在应用的时候一般采用两种方法:
    一:profile
    二:自己建立一个memberinfo表,来进行扩充,但是这时候的查询要自己写了。
    一般写成类,使用起来也是很方便的.
      

  3.   

    谢谢,我还有几个问题不明白
    1: profile的话,数据好象都是串行化的存在aspnet_Profile这个表中,这样好么?
    2: 自己建立一个memberinfo表,需要建立一个类来继承Membership吧?有没有写好的代码供我们学习一下啊?谢谢!!
      

  4.   

    这是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;
        }
      

  5.   

        public static MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, out MembershipCreateStatus status)
        {
            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;
                }
            }
        }
      

  6.   

        public static MembershipUserCollection GetAllUsers()
        {
            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();
        }