我正在创建ASP.NET MVC Web应用程序。我有数据模型用户:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Knihovna.Models
{
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public string Login { get; set; }
public string Password { get; set; }
public List<Book> Books { get; set; }
}
}
我需要创建用户注册和用户登录。应用程序需要知道如果用户已登录。
有一些最佳做法怎么做?将登录用户保存在会话中?
答案 0 :(得分:2)
我会使用ASP.NET成员资格和角色提供程序模型。如果您希望使用自定义表执行此操作,则可以创建一个继承自成员资格提供程序的类。您可以实现许多方法来支持更改密码,忘记密码等内容......但登录的方法是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
}
要授权应用程序的某些区域,您可以使用“授权”属性。
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和角色提供程序的更多信息
答案 1 :(得分:2)
没有必要搞砸Session
对象。
由于您已经在使用ASP.NET MVC,因此您的Controllers文件夹中可能有AccountController
。该控制器具有基本的身份验证方法。
我建议您看一下ASP.NET团队的本教程,该团队解释然后向您展示如何在ASP.NET MVC中使用身份验证+授权。
ASP.NET MVC的默认Visual Studio项目模板 新的ASP.NET MVC时自动启用表单身份验证 应用程序已创建。它还会自动添加预先构建的 帐户登录页面实现到项目 - 这使它 非常容易在网站中集成安全性。