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

时间:2013-05-24 13:12:09

标签: asp.net-mvc-4 logout simplemembership

我使用ASP.NET SimpleMembership ..

我的情景;

用户登录,然后我在webpages_Membership表上将IsConfirmed列更改为false。 并且用户尝试更改页面,登录页面似乎是用户..

2 个答案:

答案 0 :(得分:1)

您最明智的选择是使用Global.asax.cs中的任何身份验证相关步骤,或derive from 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执行请求授权。

答案 1 :(得分:0)

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

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