MVC自定义成员资格提供程序和AccountController.cs

时间:2013-12-31 00:05:36

标签: membership-provider asp.net-mvc-5 custom-membershipprovider

我已经实现了我自己的自定义MembershipProvider,在web.config中配置它并且我的initialize方法被成功调用,即使它只包含:

    public override void Initialize(string name, NameValueCollection config)
    {
        base.Initialize(name, config);
    }

我还实现了所有其他标准方法,如:

    public override bool ChangePassword(string username, string oldPassword, string newPassword)

    public override bool ValidateUser(string username, string password)

我对编写自定义MembershipProvider的好处的理解是,一旦您实现了接口并对其进行了初始化,适当的方法将在标准MVC 5网站的适当时间自动调用。即当用户登录或注册等时。除了Initialize()...

之外,我的方法都没有被调用

我是否需要通过标准的AccountController.cs并更改其中的所有方法以强制它调用我的自定义MembershipProvider?

E.g。这是标准的Login()方法:

    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        if (ModelState.IsValid)
        {
            var user = await UserManager.FindAsync(model.Email, model.Password);
            if (user != null)
            {
                await SignInAsync(user, model.RememberMe);
                return RedirectToLocal(returnUrl);
            }
            else
            {
                ModelState.AddModelError("", "Invalid username or password.");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

我是否必须修改它以确保它调用我的东西?

或者我错过了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

在解决方案底部的web.config上,将其粘贴到<system.web>

//这很容易修改

<membership defaultProvider="YourCustomMembershipProvider">
      <providers>
        <clear /> //this clears up all the default membership called on init
        <add name="YourCustomMembershipProvider" passwordFormat="Hashed" type="ProjectName.YourFolder.YourCustomMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
      </providers>
    </membership>

    <roleManager enabled="true" defaultProvider="YourCustomRoleProvider">
      <providers>
        <clear />
        <add name="YourCustomRoleProvider" type="ProjectName.YourFolder.YourCustomRoleProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" />
      </providers>
    </roleManager>

希望这会有所帮助。 :)