答えて

9

アイデンティティは、同時ログインを追跡するための組み込みの方法はありませんが、回避策を行うことができます:AUTH-クッキーを設定する前に、毎回ユーザーがログイン中に、変更、ユーザーのSecurityStampawait userManager.UpdateSecurityStampAsync(user.Id);

によるとあなたはStartup.Auth.csでこの部分を持っていることを確認してください:ユーザーのSecurityStampが変更されたため、この方法

 app.UseCookieAuthentication(new CookieAuthenticationOptions 
     { 
      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(5), 
        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)) 
      } 
     });    

たびにユーザーのログイン、他のすべてのセッションが無効になります。 validateIntervalは十分に低い値に設定されているので、他の認証クッキーをすぐに無効にすることができます。

+0

私はログインを回避する方法を探していました。 UserManager.GetSecurityStampAsyncはそのトリックですか? –

+1

@ ThiagoCustodio 'GetSecurityStampAsync'は、ユーザーのレコードに格納されたGUIDであるセキュリティスタンプのみを返します。それだけではあまり効果がありません。 2回目のログインを避けるためには、これははるかに複雑です - 何とか現在のセッションを追跡し、そのIDを保持し、そのIDをauth-cookieに入れ、現在のセッションが既に保存されているかどうかを確認します。そして、私はこのアプローチの問題の山を予見できます。最終的に、ユーザーにログインの共有を停止させたい場合は、パスワードの共有が間違っているとすぐに提案された方法で技術を公開します。 – trailmax

+0

MVC 5のファイルでuserManager.UpdateSecurityStampAsync(user.Id)を待っていますか? – SAR

関連する問題