我已经实现了我自己的自定义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);
}
我是否必须修改它以确保它调用我的东西?
或者我错过了什么?
感谢。
答案 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>
希望这会有所帮助。 :)