5

ASP.net を使用する Web サイトがあります ... Visual Web Developer からアクセスする ASP.net Web サイト管理ツールを使用して、サイトへのユーザー アクセスを追加/変更します。ユーザーが「remember me」ボックスにチェックを入れて自動ログインした場合、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 の内容のみを呼び出しがチェックするためです。

これに対する 1 つの解決策は、サイトの役割ベースのセキュリティを有効にすることです。ロールを使用すると、サイトのセクションを特定のカテゴリのユーザーから保護できます。たとえば、管理ページをアカウントのサブセットのみに表示することができます。

このロール情報は 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 に答える