2017-05-05 15 views
0

私はアイデンティティを持つ.Net MVC5を使用しています。MVC5のロックアウト時にユーザーを強制的にログアウトさせる方法

ロックアウトページを表示して、ロックアウトステータスに基づいてユーザーに強制的にログアウトさせるにはどうすればよいですか?

私は2人のユーザーを作成しました.1人はロール "Admin"に、もう1人はロール "RegisteredUser"にあります。

特定の「RegisteredUser」をテストするためだけに、DateTime.MaxValueにロックアウトを有効または無効にし、ロックアウトを設定するAjaxアクションを作成しました。それは管理者だけのためのいくつかのビューに夢中になった。

サインイン中に「RegisteredUser」が「Admin」によってロックアウトされている場合は、「RegisteredUser」に次の要求時または少なくとも60分後にロックアウトされたページが表示されます。

今、私はAuthorizationFilterとActionFilter、またはGlobal.asaxのイベントハンドラについて聞いたことがあります。しかし、ユーザーを無効にするメカニズムが既に存在し、ターゲットユーザーの役割にすぐに反映されているのかもしれません。

即時施行でユーザーをロック/無効にするこの問題を最もよく実装する方法。

答えて

0

OnActionExecutingを実装するベースコントローラを使用します。その時点で、ユーザがロックアウト画面にredirectedする必要があるかどうかを確認できます。

+0

Hmm ....これは確かにそれを行う方法ですが、私はデータベースを絶えずチェックしたくないので別の解決策をとってきました。 – Dino

0

ユーザーをロックアウトしているうちに、認証のCookieを無効にするSecurityStampも変更しました。 Startup.Authで見つかるIntegrated Identity 2.0メカニズムは、毎回(デフォルト:30分)Cookieの整合性をチェックし、有効でない場合はユーザーをログアウトします(たとえば、異なるSecurityStampを持つCookieを持つ)。小切手のための時間遅れは変更することができますが、私は自分のプロジェクトにちょうどいいと思います。

このコード部分は一部のユーザーのCookieを無効にします。また、毎日チェックするようにスケジュールしました。

var userManager = Request.GetOwinContext().GetUserManager<ApplicationUserManager>(); 
var user = userManager.FindByName(username); 

userManager.SetLockoutEnabled(user.Id, true); 
userManager.SetLockoutEndDate(user.Id, DateTime.MaxValue); 
user.SecurityStamp = Guid.NewGuid().ToString("D"); 
userManager.UpdateSecurityStamp(user.Id); 

クッキーの検証および/または再生を担当する部分はすでに存在しますが、間違っていない場合は、アイデンティティ2.0のみが存在します。クレジットはそれらの人々に行くので、私は別の記事でStackOverflowの上ここでは、このすべてを発見した

app.UseCookieAuthentication(new CookieAuthenticationOptions 
{ 
    AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
    LoginPath = new PathString("/Account/Login"), 
    Provider = new CookieAuthenticationProvider 
    { 
     // Enables the application to validate the security stamp when the user logs in. 
     // This is a security feature which is used when you change a password or add an external login to your account. 
     OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
      validateInterval: TimeSpan.FromMinutes(30), 
      regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
    } 
});  

:それは設定がStartup.Auth.csファイルであり、このようになります。

ケビン・ラファイの答えは確かに働いているので、私はこれを初めて勉強しています。

関連する問題