【问题标题】:Implementing Custom Membership user and Custom Membership Provider实现自定义会员用户和自定义会员提供者
【发布时间】:2011-12-26 18:46:33
【问题描述】:

参考文献

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

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

问题

在标题Create a Custom Membership Provider 正下方的第二个链接中,您会注意到他们提到了这一点

您需要创建一个支持 您的自定义会员用户类型和您的自定义会员数据 店铺。自定义成员的 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 时无法更改返回类型。那我现在该怎么办,

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

【问题讨论】:

    标签: c# asp.net-membership overriding membership-provider membershipuser


    【解决方案1】:

    您不应创建返回 CustomMembershipUser 的新方法。

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

    例如当你回来的时候出去。

    return (MembershipUser)new CustomMembershipUser();

    【讨论】:

    • 编译器为我处理了转换,我只需要返回我的custommembershipuser,在应用程序中我将不得不重新转换它。
    • 你不需要强制转换为基类,它会隐式完成。
    【解决方案2】:

    您需要在函数中返回一个MembershipUser 实例,这是它的返回类型。目前它没有返回它应该返回的东西。

    codeproject 上有一个很好的教程:Custom Membership Providers。您可能会发现它有助于了解您的错误之处。

    【讨论】:

    • 你没有回答帖子末尾的项目符号中的问题2
    • 您必须实施它们。它作为一个包提供:-)。 MembershipProvider 抽象类从 System.Configuration.Provider 命名空间继承 ProviderBase 抽象类,因此您还必须实现 ProviderBase 类的必需成员。访问Required MembershipProvider Members 了解需要实施什么才能使其正常工作
    • 只是另一个想法,如果我继承 providerbase 并实现我自己的 MembershipProvider 版本,它将与会员组件一起使用。
    • 嗯...在这种情况下,您可以摆脱它们。但话又说回来,为什么要重新发明轮子。您将需要做很多(很多)更多的工作来直接实现 ProviderBase 只需要一点点需求
    • 你有点糊涂了。这就是这些特定提供商为您提供的:(1) 成员身份 - 用户身份验证(用户名/密码)(2) 角色 - 用户授权(IsAdmin? IsPowerUser?) (3) 个人资料- 关于用户的详细信息(电话号码、年龄、出生日期)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多