2013-08-10 5 views
5

ASP.netを使用しているWebサイト... Visual Web DeveloperからアクセスしたASP.net Webサイト管理ツールを使用して、サイトへ。ユーザーが「私を覚えています」チェックボックスをオンにして自動ログインすると、Cookieが削除されるまでアカウントを無効または削除することは効果がありません。どうしてこれなの?アクセスを拒否する、または無効または削除されたアカウントのエラーメッセージにそれらをリダイレクトする、コードの背後に置かれたいくつかのタイプのロジックがありますか?アカウントが非アクティブであるかデータベースから削除されている場合でもASP.NETユーザーはログインできます

これは、現在私が背後にある自分のコードを持っているものです...

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 

ありがとう!

+0

ユーザーがIsAuthenticatedされているかどうかをチェックするだけでなく、ユーザーアカウントがまだアクティブであるかどうかを確認する方法もあります。 –

+0

ユーザーがアクティブであるかどうかを確認するにはどうすればよいですか? –

+0

これは 'GetUser'メソッドを持っています。ユーザーがもう存在しない場合、このメソッドはnullを返します。 http://msdn.microsoft.com/en-us/library/40w5063z.aspx –

答えて

4

お気づきのように、IsAuthenticatedは、削除された後でもtrueを返します。これは、コールが認証クッキーの内容をチェックするだけで、まだそのシステムに常駐しているためです。

サイトの役割ベースのセキュリティを有効にする方法があります。役割を使用するとは、特定のカテゴリのユーザーからサイトのセクションを保護することができます。管理ページをアカウントのサブセットのみに表示することができます。

このロール情報は、Cookieではなくバッキングストアに保存されるため、毎回適切にチェックする必要があります。また、ユーザーが削除されると削除されるため、保護されたページは削除されるとすぐにユーザーがアクセスできなくなります。

ウェブベースのツールでもこれをすべて管理することができます。ここ

より:

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

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(); 
     } 
    } 
+0

これは、ユーザーがブラウザを再オープンしたときにのみ発生します。 – Faiz

関連する問題