2010-11-16 48 views
1

一个非常简单的问题,也许有人有像我这样的MVC初学者的提示。我想密码保护一个MVC应用程序 - 只需要用户/密码是必要的 - 我通过ASPNETDB和SqlMembershipProvider做到了,但应该有一个更简单的方法 - 在webforms中,我通过将用户/密码添加到web.config中来实现。简单的用户/密码保护在asp.net MVC

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

回答

1

你不需要使用任何会员提供商为了密码保护您的应用程序。您只需提供一个服务来验证用户凭证。你可以看看here了解如何做到这一点。基本上,您需要生成一个salt,然后使用该salt(以及提供的密码)对用户密码进行哈希处理。然后你将salt和哈希密码存储在数据库中。试试吧,这并不难。验证用户的凭据后,可以使用我编写in this SO question的代码来使用表单身份验证。

干杯!

+0

非常感谢,我通过自己的MembershipProvider同时完成了 - 只是重写了ValidateUser并且工作正常 - 但是您的解决方案更简单... – 2010-11-16 10:27:53

2

嗨,如果你已经开始与visual studio的mvc项目,你有标准的UserController。如果你看看这个类,你会发现下面的方法:

​​

你可以推动你自己的代码在这个函数验证密码和登录。

例如:

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); 
    } 
} 

希望它会帮助你。 Regards

0

为什么XML MembershipProvider?您只需要继承IMembershipProvider,并实现您所需的功能。

+0

我在考虑将用户/密码存储在xml文件或web.config中。 – 2010-11-16 12:43:37

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。 Thx为您提供帮助。

+0

这对于只有一次登录且没有真实用户的个人网站来说很简单 – 5uperdan 2014-03-03 20:13:37