首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现自定义MembershipUser

实现自定义MembershipUser
EN

Stack Overflow用户
提问于 2009-05-26 18:49:25
回答 3查看 17.2K关注 0票数 10

在实现自定义MembershipUser方面,我需要一些帮助,以便能够将自己的自定义属性添加到MembershipUser中。

我一直在跟踪这个站点上的例子:如何:实现自定义成员资格用户

我遇到的问题是CustomMembershipUser的构造函数,我认为.

我的CustomMembershipUser具有以下三个附加属性: firstName、middleName、lastName。

代码语言:javascript
复制
public class CustomMembershipProvider : MembershipProvider
{
  public override MembershipUser GetUser(string username, bool userIsOnline)
    {
       //.... Get data from database
       MembershipUser baseUser = new MembershipUser(this.Name,
                                               username,
                                               userId,
                                               email,
                                               "",
                                               comment,
                                               isApproved,
                                               isLockedOut,
                                               dtCreate,
                                               dtLastLogin,
                                               dtLastActivity,
                                               DateTime.Now,
                                               dtLastLockoutDate);
                    return new CustomMembershipUser(baseUser, firstName, middleName, lastName)
    }
}


public class CustomMembershipUser : MembershipUser
{
  private string _firstName;
    public string FirstName { get { return _firstName; } set { _firstName = value; } }

    private string _middleName;
    public string MiddleName { get { return _middleName; } set { _middleName = value; } }

    private string _lastName;
    public string LastName { get { return _lastName; } set { _lastName = value; } }

 public CustomMembershipUser(MembershipUser baseuser, string firstname, string middlename, string lastname)
    {
        _firstName = firstname;
        _middleName = middlename;
        _lastName = lastname;

        new CustomMembershipUser(baseuser); // DO I NEED THIS?? HOW TO IMPLEMENT??
        
    }
}

我这样称呼它:

代码语言:javascript
复制
    MembershipUser mu = Membership.GetUser(UserName);

    CustomMembershipProvider p = (CustomMembershipProvider)Membership.Provider;
    
    MembershipUser memUser = p.GetUser(UserName, true);

    object userId = memUser.ProviderUserKey;

ProviderUserKey是空的,其他值也是空的。

如何获得我添加的属性?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-05-26 19:39:06

这是为我工作的:

代码语言:javascript
复制
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
票数 12
EN

Stack Overflow用户

发布于 2009-05-26 19:01:39

根据我自己的经验,尝试做同样的事情,尝试使用MembershipProvider来做这件事将是一种最终令人沮丧和违背直觉的体验。

成员资格提供程序模型的思想并不是像您试图做的那样改变或扩展用户的定义--它是允许框架访问已经定义为属于"MembershipUser“的信息的另一种方式。

我认为你真正想要的是一个用户配置文件。使用ASP.NET配置文件比实现您自己的提供程序更容易装载。您可以在这里找到概述。

票数 12
EN

Stack Overflow用户

发布于 2009-05-26 19:05:30

就像你知道的,我以前试过沿着MembershipProvider路走,这是一条长而多风的小路。您可能会看到,仅仅创建实现IPrincipal和IIdentity的类是否能够满足您的需求,因为它们所带来的开销要小得多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/912121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档