ASP.NET中的自定义成员资格提供

时间:2013-06-13 14:54:39

标签: asp.net asp.net-mvc asp.net-membership

我正在实现自己的会员提供者。我使用了存储库模式。

public interface IMembershipService: IDisposable
{
    void CreateUser(string username, string password, string email, string role);
    bool CheckUsernameExist(string username);
    string EncodePassword(string originalPassword,string salt);
    // Some other my admin methods
}
public class MembershipService : IMembershipService
{
    public MembershipService()
    {
    }
    public void ActivateUserAccount(string username, string email)
    {
        // Some validation code
    }
    public void CreateUser(string username, string password, string email, string role)
    {
        // Some validation code
    }
   }

我没有继承MembershipProvider。现在,我想知道如何实现返回当前登录用户的GetUser()。我不知道这一点。 第二件事,通过继承MembershipProvider,我可以使用GetUser()或其他一些有用的方法吗?如果我想这样做,我也不能继承那个班级。 请指导我,不要因为这个问题的答案最重要。 感谢

3 个答案:

答案 0 :(得分:1)

如果要创建自定义ASP.NET成员资格提供程序,必须从抽象MembershipProvider类继承。如果没有,它将不适合整个ASP.NET Providers模型。

  

要实现成员资格提供程序,请创建一个继承的类   System.Web.Security中的MembershipProvider抽象类   命名空间。 MembershipProvider抽象类继承了   System.Configuration.Provider中的ProviderBase抽象类   命名空间,所以你必须实现所需的成员   ProviderBase类也是如此。

http://msdn.microsoft.com/en-us/library/f1kyba5e(v=vs.100).aspx

您需要覆盖所有方法并提供自己的数据访问权限。 这是example code for an ODBC Provider Implementation

答案 1 :(得分:0)

我推荐这个库: Code First MembershipProvider。只需用对存储库的调用替换数据库查询。

答案 2 :(得分:0)

您正走在正确的轨道上,您现在要做的就是让MembershipService实施IMembershipServiceMembershipProvider,然后您可以执行以下操作:

public class MembershipService : MembershipProvider, IMembershipService
{
    private readonly IUserRepository _userRep; // or whatever you are calling your user repository

    public MembershipService()
       : this(DependencyResolver.Current.GetService<IUserRepository>())
    {
    }

    public MembershipService(IUserRepository userRep)
    {
       this._userRep = userRep;
    }

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
    ...

您的IMembershipService界面应该实现您计划使用的MembershipProvider中的所有类。 然后,您可以将IMembershipService注入控制器。