实现自定义成员用户和自定义成员提供程序

3

参考

http://msdn.microsoft.com/en-us/library/6tc47t75%28v=VS.80%29.aspx

http://msdn.microsoft.com/en-us/library/ms366730.aspx

问题

在第二个链接的“创建自定义成员资格提供程序”标题下,您会注意到他们提到了以下内容:

您需要创建一个自定义成员资格提供程序,支持您的自定义成员资格用户类型和自定义成员资格数据存储。自定义成员资格提供程序的GetUser和CreateUser方法可以编写为返回自定义成员资格用户类型的对象。

下面是我的自定义成员资格用户和自定义字段。

自定义成员资格用户

 public class CustomMembershipUser : MembershipUser
    {
        //private fields for internal use
        private bool _isMarried;
        private bool _hasLicense;
        private string _address;
        private int _userId;

        //public fields for use by end user

        public int UserId
        {
            get { return _userId; }
            set { _userId = value; }
        }
...

自定义会员提供程序

public class CustomMembershipProvider : MembershipProvider
    {
        .....

        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
        {
            throw new NotImplementedException();
        }
....

我按照他们的指示做了,返回我的自定义类型会员用户如下。
public override **CustomMembershipUser** CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)

但是,IDE向我抱怨说:无法在重写MembershipProvider.CreateUser时更改返回类型。那么现在我该怎么办呢?

  • 创建另一个具有相同参数并返回自定义成员资格用户的方法?
  • 我不需要密码问题、安全问题字段,我该如何摆脱它们?
2个回答

4
你需要在函数中返回一个MembershipUser实例,这是它应该返回的类型。目前它并没有返回正确的内容。
这里有一篇很好的教程: 自定义会员资格提供者。你可能会发现它有助于理解你未能正确处理的地方。

你没有回答帖子末尾的问题2。 - Deeptechtons
你需要实现它们。这是一个包 :-) 。MembershipProvider抽象类继承自System.Configuration.Provider命名空间的ProviderBase抽象类,因此您还必须实现ProviderBase类的所需成员。访问Required MembershipProvider Members以了解需要实现哪些内容才能使其正常工作。 - Pankaj Upadhyay
另一个想法,如果我继承ProviderBase并实现自己的MembershipProvider版本,它是否能与成员组件一起工作。 - Deeptechtons
1
嗯...在那种情况下,你可以抛弃它们。但是再想想,为什么要重复造轮子呢?为了一个小需求直接实现ProviderBase需要做很多(很多)额外的工作。 - Pankaj Upadhyay
还有一个问题,如果成员资格用户提供了有关用户的所有信息,那么“个人资料提供程序”的作用是什么?请解释给外行人听。 - Deeptechtons
1
你可能有些困惑。这些特定提供者为你提供以下内容:(1)会员资格- 用户认证(用户名/密码);(2)用户角色- 用户授权(是否管理员?是否高级用户?);(3)用户档案- 用户详细信息(电话号码、年龄、出生日期)。 - Pankaj Upadhyay

-1

你不应该创建一个返回CustomMembershipUser的新方法。

在自定义成员资格提供程序中,你应该只有MembershipUser CreateUser(...)。在返回之前,你需要将CustomMembershipUser强制转换为MembershipUser。

例如,在返回时使用以下代码:

return (MembershipUser)new CustomMembershipUser();


编译器已经为我处理了转换,我只需要返回我的“custommembershipuser”,在应用程序中,我只需要重新转换一下就可以了。 - Deeptechtons
你不需要强制转换为基类,因为它将会隐式完成。 - Yan Sklyarenko

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接