如果我更改了IsConfirmed列,我该如何踢用户?



我使用ASP。净SimpleMembership . .

我的场景;

用户登录,然后我将webpages_Membership表上的IsConfirmed列更改为false。而用户尝试更改页面时,登录页面似乎对用户…

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

因此,我将扩展您的[Authorize]属性来做以下事情,并在适当的控制器和动作中使用它而不是[Authorize] (我假设c#,因为您没有在标签中指定语言):

public class AuthorizeIfConfirmedAttribute : AuthorizeAttribute {
    protected override bool AuthorizeCore(HttpContextBase httpContext) {
        if (!base.AuthorizeCore(httpContext)) return false;
        System.Security.Principal.IIdentity user = httpContext.User.Identity;
        return WebMatrix.WebData.WebSecurity.IsConfirmed(user.Name);
    }
}
[AuthorizeIfConfirmed]
public class MyController { ... }

(如果你想在UserProfile类上使用自定义属性而不是IsConfirmed,那么你可以简单地相应地调整此代码)。

这种方法的优点是它将所有的授权逻辑保持在通常的位置,并且您还可以将它与角色强制结合起来,例如:
[AuthorizeIfConfirmed(Roles = "admin")]
public class MyController { ... }

请注意,如果你使用WebApi或SignalR,你可能必须包括这些检查,但是你也在为api执行请求授权。

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

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

最新更新