Asp.net mvc 在.NET MVC中实现活动成员身份验证
我需要验证经过身份验证的用户是否具有我的站点的活动成员身份。例如,如果用户的会员资格处于活动状态,则他们可以自由浏览网站的“仅会员”区域,而如果其会员资格处于非活动状态或已过期,则会自动重定向到网站的计费区域。他们只能查看某些受限页面 我正在考虑通过将用户的成员资格过期日期存储在FormsAuthenticationCookie中来实现这一点。我正在使用一个自定义的成员资格提供者,并且已经在cookie中存储了用户的ID,所以这很容易做到。身份验证cookie设置为24小时后过期。然后,我将使用自定义的Asp.net mvc 在.NET MVC中实现活动成员身份验证,asp.net-mvc,asp.net-mvc-4,membership-provider,Asp.net Mvc,Asp.net Mvc 4,Membership Provider,我需要验证经过身份验证的用户是否具有我的站点的活动成员身份。例如,如果用户的会员资格处于活动状态,则他们可以自由浏览网站的“仅会员”区域,而如果其会员资格处于非活动状态或已过期,则会自动重定向到网站的计费区域。他们只能查看某些受限页面 我正在考虑通过将用户的成员资格过期日期存储在FormsAuthenticationCookie中来实现这一点。我正在使用一个自定义的成员资格提供者,并且已经在cookie中存储了用户的ID,所以这很容易做到。身份验证cookie设置为24小时后过期。然后,我将使用
AuthorizeAttribute
检查他们的成员资格是否处于活动状态,如下所示:
public class MembershipAuthorizeAttribute : AuthorizeAttribute
{
private readonly bool authorizeMembership;
public MembershipAuthorizeAttribute()
{
this.authorizeMembership = true;
}
public MembershipAuthorizeAttribute(bool authorizeMembership)
{
this.authorizeMembership = authorizeMembership;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (this.authorizeMembership)
{
// Code to validate the membership hasn't expired
}
return base.AuthorizeCore(httpContext);
}
}
然后我可以把我的控制器装饰成这样:
[MembershipAuthorize]
public class ActiveMembersController : Controller
{
// Only users with an active membership can access this controller
}
[MembershipAuthorize(false)]
public class BillingController : Controller
{
// All members can access this controller
}
这是一种很好的方法,还是有一种更干净/更可取的方法来验证用户的成员资格是否有效?我不希望为了检索用户的成员资格过期日期或状态而在每次请求时都访问数据库,这就是我希望将此值存储在cookie中的原因。另外,将该值存储在FormsAuthenticationCookie中可以吗,还是应该将其存储在其他cookie中?将该信息存储在cookie中并不是正确的方法。正如在这个答案中指出的,原因是cookies存储在客户机中。所以它们有可能被篡改
将这些信息存储在数据库中似乎更合适。如果你关心性能,你可以随时缓存你的查询。我会采取不同的方法。我将有一个后台进程来检查即将到期的会员资格,并禁用这些帐户 如果用户试图登录,我会检查帐户是否被禁用,然后采取行动