がインストールアイデンティティビットでサイトを作成すると、あなたのサイトは "IdentityModels.cs" と呼ばれるファイルを持っています。このファイルには、IdentityUserから継承するApplicationUserというクラスがあります。
// You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
public class ApplicationUser : IdentityUser
がコメントでの素敵なリンクを容易にするためにこのチュートリアルでは正確にあなたがあなたのユーザーのためにカスタムプロパティを追加する何をする必要があるかを説明しますhere
をクリックして、あります。
実際、チュートリアルを見ても気にしないでください。 )
public bool? IsEnabled { get; set; }
2あなたのDBにAspNetUsersテーブルの上に同じ名前の列を追加します。
1)例えば、ApplicationUserクラスにプロパティを追加します。
3)ブーム、それだけです!次のように
は、今すぐあなたのAccountControllerで、あなたが登録作用を有する:
public async Task<ActionResult> Register(RegisterViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, IsEnabled = true };
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
私はApplicationUserオブジェクトの作成時にでIsEnabled =真を追加しました。値はAspNetUsersテーブルの新しい列に保持されます。
これで、ApplicationSignInManagerのPasswordSignInAsyncをオーバーライドすることで、サインインプロセスの一環としてこの値をチェックする必要があります。
次のように私はそれをやった:
public override Task<SignInStatus> PasswordSignInAsync(string userName, string password, bool rememberMe, bool shouldLockout)
{
var user = UserManager.FindByEmailAsync(userName).Result;
if ((user.IsEnabled.HasValue && !user.IsEnabled.Value) || !user.IsEnabled.HasValue)
{
return Task.FromResult<SignInStatus>(SignInStatus.LockedOut);
}
return base.PasswordSignInAsync(userName, password, rememberMe, shouldLockout);
}
あなたの走行距離は異なる場合があり、そしてあなたがSignInStatusことを返すようにしたいかもしれませんが、あなたのアイデアを得ます。
ApplicationSignInManagerまたはPasswordSignInAsync(...)を持たないIdentity 3.0を使用してASP.NET Core 1.0でどのように同じことを達成できますか? – nam
'.Result'を使用することは、推奨事項に反するものであり、特定のシナリオではデッドロックを引き起こすことが知られており、非同期の全ポイントを打ち負かすスレッドもブロックします。 'PasswordSignInAsync'メソッドを' async'とマークし、代わりに 'FindByEmailAsync'を待つ方が良いでしょう。 – TKharaishvili
これの最大の問題は、すでにログインしている場合に影響を与えないことです。特に、「Remember Me」チェックボックスをチェックした場合。彼らが定期的にサイトにアクセスする場合、彼らはログインする必要はありません。私は、既存のロックアウトロジックがこれに使用できるかどうかを把握しようとしています。 。 –