سلام خسته نباشید بنده میخواستم بدونم برای دیتای اولیه باید چگونه عمل کرد ؟
به صورت عادی اگر عمل کنیم چطوری باید پسورد رو Hash کنیم و مثلا مقام اش رو تعیین کنیم .
بالاخره یک یوزر اولیه باید باشه با مقام ادمین .
تشکر
سلام عزیز.
میتونید Usermanager رو دریافت کنید از طریق کانستراکتور یا از طریق ServiceProvider و سپس از طریق Usermanager که دریافت کردید کاربر موردنظرتون رو به دیتابیس اضافه کنید.
به شخصه این روش رو انجام میدم.
توی کلاس استارتاپ مثلا ؟
یا program ؟
چون باید یک بار فقط اجرا بشه دیگه
ما این کار رو انجام میدیم ( نمونه ساده شده هستش ) :
یک کلاس SeedDatabase داریم :
public class SeedDatabase
{
public static async Task InitializeAsync(IServiceProvider serviceProvider)
{
var dbContext = serviceProvider.GetRequiredService<ApplicationDbContext>();
var userManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
}
}
توی این کلاس یه متود استاتیک هستش یه میاد IServiceProvider رو دریافت میکنه. ما از طریق این IServiceProvider میایم سرویس های مورد نظرمون رو دریافت میکنیم.
و برای استفاده از این متود استاتیک، توی کلاس Program متود Main رو به این شکل تغییر میدیم :
public static void Main(string[] args)
{
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
logger.Debug("init main");
var host = CreateHostBuilder(args).Build();
using (var scope = host.Services.CreateScope())
{
try
{
var services = scope.ServiceProvider;
SeedDatabase.InitializeAsync(services).GetAwaiter().GetResult();
}
catch (Exception e)
{
//NLog: catch setup errors
logger.Fatal(e, "Stopped program because of exception");
throw;
}
}
host.Run();
}
البته ما از Nlog استفاده میکنیم برای لاگ زدن شما میتونید اینو عوض کنید.
الان موقع استارت پروژه این متود استاتیکی که ساختیم فراخونده میشه و شما میتونید توی اون متود چک کنید اگر دیتابیس خالی بودش اطلاعات رو بهش اضافه کنید.
مرسی تشکر
فقط یک سوال میخواستم بدونم آیا این لینک میتونه مفید باشه چون کاری که گفتین در واقع از استاندارد کار یکم دوره برای همین
https://stackoverflow.com/questions/50785009/how-to-seed-an-admin-user-in-ef-core-2-1-0
فک کنم اگه طبق این روش عمل کنیم میتونیم در حد نیاز (user, role ) رو اضافه کنیم فقط بحث Hash کردن پسورد میمونه ..
کلاسی یا متدی برای این کار وجود داره ؟
این روشی که من معرفی کردم روش استفاده شده توسط :
https://github.com/jasontaylordev/NorthwindTraders
هستش که بالای 4 هزار استار دریافت کرده توی گیت هاب و منبع بسیار مفیدی هستش برای این موارد.
باز هم پیشنهاد میکنم از Usermanager استفاده کنید برای اینکار، در غیر این صورت باید برید کدهای Usermanager رو بررسی کنید و ببینید چگونه پسورد رو هش میکنه.
کار کرد بسیار متشکرم
خواهش میکنم، موفق باشید.