如果帐户处于非活动状态或从数据库中删除,ASP.NET用户仍可以登录

5 asp.net

我有一个使用ASP.net的网站...我使用从Visual Web Developer访问的ASP.net网站管理工具来添加/修改用户对该网站的访问权限.我注意到,如果用户选中了"记住我"框以自动登录,则在删除cookie之前禁用或删除帐户无效.为什么是这样?可以在后面的代码中放置某种类型的逻辑,拒绝访问或将它们重定向到禁用或删除帐户的错误消息吗?

这是我目前在我的代码中所拥有的......

Protected Sub Page_Init(sender As Object, e As System.EventArgs) Handles Me.Init

    If User.Identity.IsAuthenticated Then
        Response.Redirect("~/homepage")
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

这也在Page_Init部分下面......

Protected Sub LoginUser_LoginError(sender As Object, e As System.EventArgs) Handles LoginUser.LoginError

    LoginUser.FailureText = "Invalid Username or Password - Please Try Again"

    Dim usrInfo As MembershipUser = Membership.GetUser(LoginUser.UserName)

    If usrInfo IsNot Nothing Then
        If usrInfo.IsLockedOut Then
            LoginUser.FailureText = "Your account has been locked - Contact the system administrator"
        ElseIf Not usrInfo.IsApproved Then
            LoginUser.FailureText = "Your account is disabled - Contact the system administrator"
        End If
    End If

End Sub
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Dav*_* R. 4

正如您所注意到的,IsAuthenticated即使用户已被删除,也会返回 true。这是因为该调用仅检查身份验证 cookie 的内容,该内容仍然驻留在他们的系统上。

解决此问题的一种方法是为站点启用基于角色的安全性。使用角色意味着您可以保护站点的各个部分免受某些类别的用户的影响,例如使管理页面仅对帐户子集可见。

该角色信息保存在后备存储中,而不是 cookie 中,因此每次都必须正确检查。当用户被删除时,它也会被删除,因此受保护的页面一旦被删除,用户将无法访问。

您仍然应该能够通过基于网络的工具来管理所有这些。

更多这里:

http://msdn.microsoft.com/en-us/library/5k850zwb.aspx