我会使用 ASP.NET 成员资格和角色提供者模型。如果您想使用自定义表来执行此操作,您可以创建一个从 Membership Provider 继承的类。您可以实施多种方法来支持更改密码、忘记密码等操作……但用于登录的方法是 ValidateUser
public sealed class MyMembershipProvider : MembershipProvider
{
public override bool ValidateUser(string username, string password)
{
bool isValid = false;
// your authentication logic here
var ticket = new FormsAuthenticationTicket(
1,
YOUR_USER_ID_HERE,
DateTime.Now,
DateTime.Now.AddMinutes(30),
false,
name,
FormsAuthentication.FormsCookiePath);
var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(ticket));
HttpContext.Current.Response.Cookies.Add(authCookie);
return isValid;
}
}
如果您希望有不同级别的用户,您还需要创建一个角色提供者。为此,您将从 RoleProvider 类继承。
public sealed class MyRoleProvider : RoleProvider
{
// Implement logic here
}
要授权应用程序的某些区域,您将使用 Authorize 属性。
public class MyController : Controller
{
[Authorize(Roles="Role1,Role2")]
public ActionResult Index()
{
// Implement your code
}
}
最后,您必须在 web.config 中进行一些配置才能使其使用您的提供程序。
<authentication mode="Forms">
<forms loginUrl="~/Login" timeout="2880"/>
</authentication>
<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="20">
<providers>
<clear/>
<add name="MyMembershipProvider" type="Your.NameSpace.MyMembershipProvider" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false"/>
</providers>
</membership>
<roleManager enabled="true" defaultProvider="MyRoleProvider" cacheRolesInCookie="true">
<providers>
<clear/>
<add name="MyRoleProvider" type="Your.NameSpace.MyRoleProvider"/>
</providers>
</roleManager>
您可以在 MSDN 上找到有关 memberhsip 和角色提供者的更多信息