5

我有一个使用 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

这也在 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

谢谢您的帮助!

4

2 回答 2

4

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

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

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

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

更多在这里:

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

于 2013-08-10T16:40:00.450 回答
1

解决方案很简单:在 global.asax.cs 中,实现 session_start 并在数据库中不存在用户时将其注销:

    protected void Session_Start()
    {
        if (User.Identity.IsAuthenticated
            && // !(user exists in the database)
            )
        {
            // Remove this forms-authentication cookie, and redirect to sign in without processing this request any further.
            FormsAuthentication.SignOut();
            FormsAuthentication.RedirectToLoginPage();
       }
    }
于 2013-08-10T20:36:05.443 回答