【问题标题】:MVC Custom Membership Provider and AccountController.csMVC 自定义成员资格提供程序和 AccountController.cs
【发布时间】:2013-12-31 00:05:35
【问题描述】:

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

    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 网站会在适当的时间自动调用适当的方法。 IE。当用户登录或注册等时。但是除了 Initialize() 之外,我的方法都没有被调用...

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

例如这是标准的 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);
    }

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

或者我错过了什么?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    在解决方案底部的 web.config 上,将其粘贴到 &lt;system.web&gt;

    //这个很容易修改

    <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>
    

    希望这会有所帮助。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多