Implementing Custom MembershipUser

前端 未结 3 1833
清歌不尽
清歌不尽 2020-12-13 22:38

I am going round in circles and need some help in implementing a Custom MembershipUser so that I can add my own custom Properties to the MembershipUser.

I have been f

相关标签:
3条回答
  • 2020-12-13 22:43

    This is working for me:

    public class CustomMembershipUser : MembershipUser
    {
        public CustomMembershipUser(
            string providerName,
            string name,
            object providerUserKey,
            string email,
            string passwordQuestion,
            string comment,
            bool isApproved,
            bool isLockedOut,
            DateTime creationDate,
            DateTime lastLoginDate,
            DateTime lastActivityDate,
            DateTime lastPasswordChangedDate,
            DateTime lastLockoutDate
            )
            : base(providerName, name, providerUserKey, email, passwordQuestion,
            comment, isApproved, isLockedOut, creationDate, lastLoginDate,
            lastActivityDate, lastPasswordChangedDate, lastLockoutDate)
        {
        }
    
        // Add additional properties
        public string CustomerNumber { get; set; }
    
    }
    
    public class CustomMembershipProvider : MembershipProvider
    {
    
        public override MembershipUser GetUser(string username, bool userIsOnline)
        {
            if (string.IsNullOrEmpty(username))
            {
                // No user signed in
                return null;
            }
    
            // ...get data from db
    
            CustomMembershipUser user = new CustomMembershipUser(
                        "CustomMembershipProvider",
                        db.Username,
                        db.UserId,
                        db.Email,
                        "",
                        "",
                        true,
                        false,
                        db.CreatedAt,
                        DateTime.MinValue,
                        DateTime.MinValue,
                        DateTime.MinValue,
                        DateTime.MinValue);
    
            // Fill additional properties
            user.CustomerNumber = db.CustomerNumber;
    
            return user;
    
        }
    
    }
    
    // Get custom user (if allready logged in)
    CustomMembershipUser user = Membership.GetUser(true) as CustomMembershipUser;
    
    // Access custom property
    user.CustomerNumber
    
    0 讨论(0)
  • 2020-12-13 22:45

    Based on my own experience trying to do much of the same, trying to use the MembershipProvider to do this will be an ultimately frustrating and counterintuitive experience.

    The idea of the membership provider model isn't to change or augment what the definition of a user is, as you're trying to do - it is to allow the Framework an alternate means of accessing the information that has already been defined as belonging to a "MembershipUser".

    I think what you're really looking for is a user profile. Using ASP.NET profiles is boatloads easier than implementing your own provider. You can find the overview here.

    0 讨论(0)
  • 2020-12-13 23:05

    Just so you know, I've tried to go down the MembershipProvider path before, and it's a long and windy one. You might see if just creating classes that implement IPrincipal and IIdentity will satisfy your needs, since they entail a lot less overhead.

    0 讨论(0)
提交回复
热议问题