کنترل تکراری نبودن شماره موبایل در 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 به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- نحوه لایه بندی پروژه Core و اضافه کردن به IIS
- ارسال ایمیل در Asp.net core
- آیا میشه در mvc core از کامپونت استفاده کرد
- آپلود فایل در Asp.net core چگونه است؟
- حذف کامل یک رکورد در جدول ریلیشن شده
- اشکال در آپلود فایل ویدیو در mvc core 2