asp.net MVC中的简单用户/密码保护

时间:2010-11-16 09:49:05

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

一个非常简单的问题,也许有人像我一样有一个MVC初学者的小费。我想密码保护MVC应用程序 - 只需要用户/密码 - 我是通过ASPNETDB和SqlMembershipProvider完成的,但应该有希望更简单的方法 - 在webforms中我通过向web.config添加用户/密码来实现。

我真的需要编写自己的XmlMembershipProvider来解决这个问题吗?如果是的话,你知道一个非常简单的现有XmlMembershipProvider可以为我做这个吗? 非常感谢提前..

4 个答案:

答案 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并实现所需的功能。