Asp.net mvc 4 如果我更改了isconfired列,如何踢用户?

Asp.net mvc 4 如果我更改了isconfired列,如何踢用户?,asp.net-mvc-4,logout,simplemembership,Asp.net Mvc 4,Logout,Simplemembership,我使用ASP.NET SimpleMembership 我的情景 用户登录,然后我将网页上的IsConfigure列更改为false\u成员资格表。。 当用户试图更改页面时,用户似乎会看到登录页面。您最明智的选择是使用Global.asax.cs中与身份验证相关的任何步骤,或者。考虑到未确认的用户将不得不去某个地方(例如为了确认他们的帐户),那么你可能不想要前者。无论采用哪种方法,他们的下一个请求都将被拒绝 因此,我将扩展您的[Authorize]属性以执行以下操作,并在适当的控制器和操作中使用

我使用ASP.NET SimpleMembership

我的情景

用户登录,然后我将网页上的IsConfigure列更改为false\u成员资格表。。
当用户试图更改页面时,用户似乎会看到登录页面。

您最明智的选择是使用Global.asax.cs中与身份验证相关的任何步骤,或者。考虑到未确认的用户将不得不去某个地方(例如为了确认他们的帐户),那么你可能不想要前者。无论采用哪种方法,他们的下一个请求都将被拒绝

因此,我将扩展您的
[Authorize]
属性以执行以下操作,并在适当的控制器和操作中使用该属性,而不是
[Authorize]
(我假设为C,因为您没有在标记中指定语言):

公共类authorificonfirmdattribute:AuthorizeAttribute{
受保护的覆盖bool AuthorizeCore(HttpContextBase httpContext){
如果(!base.AuthorizeCore(httpContext))返回false;
System.Security.Principal.IIdentity user=httpContext.user.Identity;
返回WebMatrix.WebData.WebSecurity.IsConfirmed(user.Name);
}
}
[确认]
公共类MyController{…}
(如果希望在
UserProfile
类上使用自定义属性,而不是
IsConfirmed
,则可以相应地调整此代码)

此方法的优点是,它将所有授权逻辑保持在通常的位置,并且您还可以将其与角色强制相结合,例如:

[authorizeifconfirm(Roles=“admin”)]
公共类MyController{…}

请注意,如果您使用WebApi或SignalR,您可能必须将这些检查包括在内,但是您也要对API执行请求授权。

I用户应用程序\u AuthenticateRequest in Global.asax。。因为我的应用程序需要在所有页面上进行身份验证

protected void Application_AuthenticateRequest()
        {
            if (WebSecurity.IsAuthenticated)
            {
                bool isConfirmed = (..your codes here..)
                if (isConfirmed == false)
                {
                    WebSecurity.Logout();    
                } 
            }
        }

您是否试图使用isconfired列禁用该帐户?如果是这样,如果您使用电子邮件确认,并且用户再次单击链接,则用户可能会将其设置回原位。最好在用户配置文件中添加一个“Enabled”列。您的描述不清楚,但您是否试图在更改此列后立即拒绝用户访问?我不使用电子邮件确认,因此我认为这没有问题。。但是你是对的谢谢你提供的额外信息。。是的,我试图在更改此列时立即拒绝用户访问。我不知道有什么方法可以立即通知ASP.NET应用程序/会话数据库更改。我认为,在您授权用户执行某项操作时,最好始终对其进行身份验证(或至少检查该列/标志)。@dustqm。这样就行了,只需在所有控制器上使用此属性或将其注册为(这正成为最佳实践)。与
应用程序_AuthenticateRequest
相比,此功能的优势在于,您可以将其与其他授权属性相结合,并拥有一种在整个站点上执行授权的通用方法(例如,为某些控制器强制执行管理员角色)。