کنترل تکراری نبودن شماره موبایل در Identity
توی Asp.net Core من میتونم به راحتی با استفاده از دستور زیر چک کنم که آیا ایمیل وجود داره یا نه
await _userManager.FindByEmailAsync(model.Email)
با استفاده از دستور بالا وجود یا عدم وجود یک ایمیل رو میشه بررسی کرد و اگر وجود داشت از ثبت مجدد اون هنگام ثبت نام میشه جلوگیری کرد. همچنین با استفاده از دستور زیر میشه کاری کرد که کلا خود Identity کنترل کنه که ایمیل های ورودی موقع ثبت نام یونیک باشن
RequireUniqueEmail = true
اما حالا سوال اینجاست که چرا این دستورات برای شماره تماس (PhoneNumber) وجود نداره. من اگر بخوام کنترل کنم که یک شماره تماس موقع ثبت نام تکراری نباشه باید چجوری ازدستورات Identity استفاده کنم ؟
پاسخ هوش مصنوعی
برای کنترل تکراری نبودن شماره تماس (PhoneNumber) در ASP.NET Core Identity، شما باید یک متد سفارشی اضافه کنید که شماره تماس را بررسی کند. برخلاف ایمیل، Identity به طور پیش فرض شماره تماس را یکتا بررسی نمی کند و شما باید این منطق را خودتان پیاده سازی کنید.
شما می توانید کد زیر را برای بررسی یکتایی شماره تماس هنگام ثبت نام استفاده کنید:
public async Task RegisterUser(RegisterViewModel model)
{
var existingUser = await _userManager.Users
.FirstOrDefaultAsync(u => u.PhoneNumber == model.PhoneNumber);
if (existingUser != null)
{
// شماره تماس وجود دارد، خطای لازم را برگردانید
ModelState.AddModelError("PhoneNumber", "این شماره تماس قبلاً در سیستم ثبت شده است.");
return IdentityResult.Failed();
}
var user = new ApplicationUser { UserName = model.Email, Email = model.Email, PhoneNumber = model.PhoneNumber };
return await _userManager.CreateAsync(user, model.Password);
}
با این کد، شما اول بررسی می کنید که آیا شماره تماس مورد نظر در بین کاربران موجود است یا خیر. در صورت وجود، یک خطای مناسب به مدل اضافه می شود و در غیر اینصورت کاربر ثبت نام می شود.
همچنین می توانید از این متد هر زمان که نیاز به بررسی یکتایی شماره تماس دارید، استفاده کنید.
توی Asp.net Core و Identity به صورت پیش فرض شما نمیتونید یونیک بودن شماره موبایل رو کنترل کنید. و دستوراتی که برای ایمیل وجود داره برای شماره موبایل وجود نداره.
اما برای کنترل تکراری نبودن شماره موبایل در Identity میتونید از قطعه کد زیر استفاده کنید.
bool IsPhoneAlreadyRegistered = _userManager.Users.Any(item => item.PhoneNumber == model.PhoneNumber);
البته اگر دیتابیس شما شامل میلیونها رکورد باشه یعنی شما میلیونها کاربر داشته باشید ممکنه قدری کند باشه استفاده از روش بالا ولی در حالت عادی ساده ترین و بهترین روش هست.
توصیه می کنم برای کسب اطلاعات بیشتر این لینک رو مطالعه بفرمایید.
- جلوگیری از اد شدن خودکار در گروه و کانال تلگرام
- کم کردن حجم فیلم توسط کد در Asp net core
- چه کسانی استوری تلگرام را می بینند ؟
- برای کسب و کار تلگرام پرمیوم بهتره یا واتس اپ بیزینس ؟
- جلوگیری از انتشار غیرمجاز مطالب در کانال های تلگرامی
- تفاوت های تلگرام و واتس اپ چیست ؟
- چرا استوری های واتس اپ برای دوستان نمایش داده نمیشن ؟
- چند تا استوری رایگان می تونیم تلگرام بذاریم ؟
- خطای Severity Code Description Project هنگام استارت پروژه
- کار نکردن navBar و sideBar در پروژه Asp.net core
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2