一个非常简单的问题,也许有人像我一样有一个MVC初学者的小费。我想密码保护MVC应用程序 - 只需要用户/密码 - 我是通过ASPNETDB和SqlMembershipProvider完成的,但应该有希望更简单的方法 - 在webforms中我通过向web.config添加用户/密码来实现。
我真的需要编写自己的XmlMembershipProvider来解决这个问题吗?如果是的话,你知道一个非常简单的现有XmlMembershipProvider可以为我做这个吗? 非常感谢提前..
答案 0 :(得分:5)
我最终做的是:
public class MyMembershipProvider : MembershipProvider {
// ...
public override bool ValidateUser(string username, string password)
{
return FormsAuthentication.Authenticate(username, password);
}
}
的web.config:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880" >
<credentials passwordFormat="Clear">
<user name="rga" password="XYZ"/>
</credentials>
</forms>
</authentication>
...
<membership defaultProvider="XmlMembershipProvider">
<providers>
<clear/>
<add name="MyMembershipProvider" type="Namespace.Of.MyMembershipProvider"
enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"
maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"
applicationName="/" />
</providers>
</membership>
因此无需更改AccountController。 谢谢你的帮助。
答案 1 :(得分:2)
如果您已经使用visual studio启动了一个mvc项目,那么您就拥有了标准的UserController。如果你研究这门课,你会发现以下方法:
public virtual ActionResult LogOn(LogOnModel model, string returnUrl)
您可以在此功能中阻止您自己的代码以验证密码和登录。
例如:
public virtual ActionResult LogOn(LogOnModel model, string returnUrl)
{
if(model.Password == "YourPassword" && model.UserName == "YourUserName")
{
FormsService.SignIn(model.UserName, model.RememberMe);
if (!String.IsNullOrEmpty(returnUrl))
{
return Redirect(returnUrl);
}
else
{
return RedirectToAction("ActionName");
}
}
else
{
ModelState.AddModelError("", "Wrong credentials.");
return View(model);
}
}
希望它会对你有所帮助。
此致
答案 2 :(得分:1)
您无需使用任何会员提供商即可为您的应用程序提供密码保护。您只需提供一项服务即可验证用户凭据。您可以查看here以了解如何执行此操作。基本上,您需要生成一个salt,然后使用该salt(以及提供的密码)对用户密码进行哈希处理。然后将salt和散列密码存储在DB中。试试吧,这并不困难。验证用户凭据后,可以使用我编写的代码in this SO question来使用表单身份验证。
干杯!
答案 3 :(得分:0)
为什么 XML MembershipProvider?您只需继承表单IMembershipProvider
并实现所需的功能。