‫۷ سال و ۸ ماه قبل، چهارشنبه ۲۲ دی ۱۳۹۵، ساعت ۰۳:۲۵
Debug.WriteLine در پنجره دیباگ ویژوال استودیو پیام‌ها را نمایش می‌دهد. اگر این پنجره را مشاهده نمی‌کنید این سطر را تبدیل به throw new Exception کنید تا واضح‌تر شود؛ یا روی آن یک break point قرار دهید و پیام‌ها را یکی یکی بررسی کنید.
‫۷ سال و ۸ ماه قبل، سه‌شنبه ۲۱ دی ۱۳۹۵، ساعت ۲۲:۴۳
- مثال را به روز کردم تا خطاهای حاصل را بهتر دریافت کنید.
- کلمه عبور و سایر تنظیمات آن باید لحاظ شوند و گرنه موفق به ثبت اطلاعات نخواهید شد.
- نحوه‌ی استخراج اطلاعات DbEntityValidationException  
‫۷ سال و ۸ ماه قبل، شنبه ۱۸ دی ۱۳۹۵، ساعت ۱۶:۴۳
- بله. فقط بجای return Viewها شما بازگشت متداول http status‌ها را خواهید داشت مانند return NotFound و یا return Ok. مابقی کدهای آن تفاوتی نمی‌کند.
- هدف نحوه‌ی نمایش این است که تزریق وابستگی‌های ASP.NET Identity و امکانات تنظیم شده‌ی آن در این مثال، در یک کنترلر Web API هم کار می‌کند.
- اگر هدف صرفا استفاده از Single page applications و Web API است، روش استفاده‌ی JWT متداول‌تر است.
‫۷ سال و ۸ ماه قبل، جمعه ۱۷ دی ۱۳۹۵، ساعت ۰۳:۵۸
شما از روش مطرح شده‌ی در مطلب جاری استفاده نمی‌کنید (FormsAuthentication.SetAuthCookie). متد SetAuthCookie، تمام این‌کارها را به صورت خودکار انجام می‌دهد (در متد GetAuthCookie آن کار رمزنگاری، خواندن اطلاعات از فایل کانفیگ، تنظیم زمان به صورت UTC و نه Local و تنظیمات اصولی و استاندارد دیگری هم انجام می‌شود).
‫۷ سال و ۸ ماه قبل، جمعه ۱۷ دی ۱۳۹۵، ساعت ۰۳:۵۱
یک HTTP Module درست کنید تا کوکی‌های Response را لاگ کند:
public void Init(HttpApplication application)
{
    application.EndRequest += onEndRequest;
}

public void onEndRequest(Object sender, EventArgs e)
{
   HttpCookieCollection cookies = (((HttpApplication)sender).Response).Cookies;
   //todo: check Cookie.Value.Length
طول (حجم) و نام این کوکی‌ها را بررسی کنید.
‫۷ سال و ۸ ماه قبل، پنجشنبه ۱۶ دی ۱۳۹۵، ساعت ۲۲:۴۲
روش دسترسی به تنظیمات برنامه (و یا هر سرویس دیگری) در متد ConfigureServices

فرض کنید تنظیمات برنامه چنین شکلی را دارند:
{
  "IdentityOptions": {
    "Lockout": {
      "MaxFailedAccessAttempts": 10,
      "DefaultLockoutTimeSpan": "0.00:05:00.0000"
    }
  }
}
و کلاس‌های معادل آن به صورت ذیل هستند:
public class SiteSettings
{
    public Identityoptions IdentityOptions { get; set; }
}

public class Identityoptions
{
    public LockoutOptions Lockout { get; set; }
}
برای دسترسی به این تنظیمات در متد ConfigureServices، مهم‌ترین نکته، فراخوانی متد services.BuildServiceProvider است:
public void ConfigureServices(IServiceCollection services)
{
   services.AddSingleton<IConfigurationRoot>(provider => { return Configuration; });
   services.Configure<SiteSettings>(options => Configuration.Bind(options));

   var provider = services.BuildServiceProvider();
   var siteSettingsOptions = provider.GetService<IOptions<SiteSettings>>();
   // now use siteSettingsOptions.Value
علت اینجا است که در متد ConfigureServices هنوز کار BuildServiceProvider انجام نشده و بدون آن، امکان دسترسی به مقادیر سرویس‌های دیگر برنامه میسر نیست.
‫۷ سال و ۸ ماه قبل، پنجشنبه ۱۶ دی ۱۳۹۵، ساعت ۲۲:۱۳
نکته‌ای در مورد طراحی دیتابیس ASP.NET Core Identity
به جدول کاربران نگارش سوم ASP.NET Identity، دو فیلد NormalizedEmail و NormalizedUserName هم اضافه شده‌اند:

که الگوریتم پیش فرض نرمال سازی آن‌ها که فقط to upper case است، قابلیت سفارشی سازی هم دارد (برای مثال جهت اعمال نکات مطلب فوق).
علت وجود این فیلدهای اضافی سه مورد است:
- الف) کاربران پس از ویرایش ایمیل‌های خود، متوجه نرمالسازی نشوند. چون اصل ایمیل در فیلد Email ذخیره می‌شود.
- ب) با نرمال سازی بتوان جلوی مشکلات مطرح شده‌ی در مطلب جاری را گرفت و از ثبت چندین ایمیل یکسان و یا نام کاربری یکسان جلوگیری کرد.
- ج) برنامه نویس دیگر نیازی  ندارد تا توابع نرمالسازی را همواره به صورت دستی، در حین ویرایش اطلاعات کاربران اعمال کند. اکنون این نرمالسازی به صورت خودکار از سرویس ILookupNormalizer دریافت و اعمال می‌شود.