2016-04-23 3 views
1

私はASP.NET IDを使用しています。ユーザーアカウントをブロックするとすぐにログアウトする必要があります。 これは私のコードです:セキュリティー・スタンプがユーザーをログアウトしないのはなぜですか?

await UserManager.SetLockoutEnabledAsync(user.Id, true); 
await UserManager.SetLockoutEndDateAsync(user.Id,DateTime.Today.AddYears(10)); 
await UserManager.UpdateSecurityStampAsync(user.Id); 

Startup.Auth.csで:

app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
       LoginPath = new PathString("/Account/Login"), 
       Provider = new CookieAuthenticationProvider 
       { 
        OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<AppUserManager, ApplicationUser>(
        validateInterval: TimeSpan.FromSeconds(0), 
        regenerateIdentity: (manager, user) => manager.CreateIdentityAsync(user, DefaultAuthenticationTypes.ApplicationCookie)) 
       } 
      }); 

しかし、それは、ユーザーがサインアウトしません。私は間違って何をしていますか?

答えて

2

なぜ使用しないのですかAuthenticationManager.SignOut()

var authenticationManager= HttpContext.GetOwinContext().Authentication; 
authenticationManager.SignOut(); 
+0

私はそのIDに基づいてユーザーをサインアウトしたいです。私には管理者権限があり、ユーザーをブロックできます。ユーザーがブロックされている場合は、ログアウトする必要があります。 –

+0

ユーザが次回訪問時に検証されたときに、明示的に 'UserManager.UpdateSecurityStampAsync(userId);'を呼び出す必要があります。このために、 'ICookieAuthenticationProvider'を実装し、それを' OnValidateIdentity'コールバックで呼び出すことができます。 – Irshu

1

認証は、クッキーと接続され、かつ認証された情報のは、そのクッキーに保管されています。クッキーは設定した時間に有効で、何をしてもこのクッキーは期限切れになるまでユーザーをログインさせないでください。またはブラウザから削除してください。

ユーザーのブラウザからそのCookieを削除できますが、何らかの理由でCookieを保持している場合は、Cookieの有効期限が切れるまでログインできます。だから、クッキーの有効期限が切れてまで、ユーザーがすでに認証されている場合、実際に記録されます。

すぐをログアウトしているしたい場合は、Ajaxを使っていくつかのチェックを作るために必要な時間におそらく時間、あなたのページの利用の場合ajax、、あるいはのユーザの認証を確認するか、または認証クッキーを保持する他のテーブルをデータベース上に作成し、それ以上有効でないものにフラグを立てて、コール。

私はあなたを表示するためのコードを持っていないことを申し訳ありません、あなたのニーズに合うようにあなたの部分から設計を必要とする複雑な問題であり、あなたのプログラム

関連する問題