در ادامه آموزشهای بخش قبلی ابتدا توضیحاتی از کدهای مرتبط با lockout را دز بخش زیر مشاهده میکنید.
- AllowedForNewUsers : آیا کاربر جدید می تواند block شود؟.پیش فرض آن True می باشد
DefaultLockoutTimeSpan : مدت زمان block شدن کاربر جدید.پیش فرض آن 5 دقیقه می باشد.
MaxFailedAccessAttempts : تعداد دفعات مجاز جهت دسترسی به پروفایل هنگام ورود که پیش فرض آن 5 مرتبه می باشد.
در این تنظیمات مقدار پیش فرض جهت Expire شدن 5 دقیقه می باشد و در صورتیکه قبل از expire شدن درخواستی از کاربر صادر شود زمان expire مجدادا ریست خواهد شد.(با توجه به کدهای زیر که در آموزش بخش قبلی مشاهده نمودید)
options.ExpireTimeSpan = TimeSpan.FromMinutes(5);
options.SlidingExpiration = true;
ثبت نام - ورود - خروج (Register, Login, LogOut)
وقتی که کاربر بر روی Register کلیک میکند اکشن RegisterModel.OnPostAsync
اجرا خواهد شد.و یک کاربر جدید با استفاده از متد CreateAsync از شیئ userManager
ایجاد خواهد شد.
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
var result = await _userManager.CreateAsync(user, Input.Password);
if (result.Succeeded)
{
_logger.LogInformation("User created a new account with password.");
var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
var callbackUrl = Url.Page(
"/Account/ConfirmEmail",
pageHandler: null,
values: new { userId = user.Id, code = code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
$"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
await _signInManager.SignInAsync(user, isPersistent: false);
return LocalRedirect(returnUrl);
}
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
// If we got this far, something failed, redisplay form
return Page();
در این سناریو با توجه به کدهای بالا پس از ایجاد یک کاربر جدید ، یک کد فعالسازی به ایمیل کاربر ارسال خواهد شد . و در همان لحظه کاربر login نیز خواهد شد.
اما جهت جلوگیری از لاگین , ملزم ساختن کاربر به تایید ایمیل فعالسازی با توجه به کدهای زیر تابع Configure را ویرایش نمایید.
public void Configure(IWebHostBuilder builder)
{
builder.ConfigureServices((context, services) => {
services.AddDbContext<WebPWrecoverContext>(options =>
options.UseSqlServer(
context.Configuration.GetConnectionString("ConnectionName")));
services.AddDefaultIdentity<IdentityUser>(config =>
{
config.SignIn.RequireConfirmedEmail = true;
})
.AddEntityFrameworkStores<ContextName>();
});
}
}
با توجه به کدهای بالا بجای ContextName و ConnectionName از نامهای مورد استفاده در برنامه خود استفاده نمایید. .
ادامه آموزش را در قسمتهای بعد ارائه خواهیم داد.