ุงู„ู€ Security Module ููŠ ุงู„ุชุทุจูŠู‚ุงุช ุจูŠุชูƒูˆู† ู…ู† ุนู†ุตุฑูŠู† ุฃุณุงุณูŠูŠู†:

  1. Authentication (ุงู„ุชุญู‚ู‚ ู…ู† ุงู„ู‡ูˆูŠุฉ)
  2. Authorization (ุงู„ุชููˆูŠุถ ุฃูˆ ุงู„ุชุตุฑูŠุญ)

ูˆู‚ุจู„ู‡ู… ุจุชุณุจู‚ู‡ู… ุฃูˆ ู†ู‚ูˆู„ ุนู„ูŠู‡ุง Step zero ูˆู‡ูŠ Identification/Registration

ุฎุทูˆุงุช ุชู†ููŠุฐ Security Module

  1. Identification/Registration (ุงู„ุชุนุฑูŠู ุฃูˆ ุงู„ุชุณุฌูŠู„):

    • ุฃูˆู„ ุฎุทูˆุฉ ู‡ูŠ ุงู„ุชุฃูƒุฏ ู…ู† ู‡ูˆูŠุฉ ุงู„ู…ุณุชุฎุฏู…ุŒ ูˆุฏูŠ ุจุชูƒูˆู† ู…ู† ุฎู„ุงู„ ุชุณุฌูŠู„ ุงู„ู…ุณุชุฎุฏู… ููŠ ุงู„ุชุทุจูŠู‚ ูˆุฅู†ุดุงุก ุญุณุงุจ ุฎุงุต ู„ู‡.
    • ุจุนุฏ ูƒุฏู‡ ุจู†ู‚ุฏุฑ ู†ุนุชุจุฑู‡ ู…ุณุชุฎุฏู… (User) ุฏุงุฎู„ ุงู„ุชุทุจูŠู‚ ุจุชุงุนู†ุง.
  2. Login (ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„):

    • ุจุนุฏ ู…ุง ูŠุชู… ุชุณุฌูŠู„ ุงู„ู…ุณุชุฎุฏู…ุŒ ุจู†ุณุชุฎุฏู… ุจูŠุงู†ุงุชู‡ ู„ู„ุชุญู‚ู‚ ู…ู† ู‡ูˆูŠุชู‡ ุนู†ุฏ ูƒู„ ุนู…ู„ูŠุฉ ุฏุฎูˆู„.
  3. Authorization (ุงู„ุชููˆูŠุถ):

    • ุจุนุฏ ุนู…ู„ูŠุฉ ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ุŒ ุจู†ุญุฏุฏ ู„ู„ู…ุณุชุฎุฏู… ุงู„ุตู„ุงุญูŠุงุช ุงู„ู„ูŠ ู…ุณู…ูˆุญ ู„ู‡ ุจู‡ุง ููŠ ุงู„ุชุทุจูŠู‚. ุจู…ุนู†ู‰ุŒ ุจู†ุญุฏุฏ ุฅูŠู‡ ุงู„ู„ูŠ ูŠู‚ุฏุฑ ูŠุดูˆูู‡ุŒ ูˆุฅูŠู‡ ุงู„ู„ูŠ ูŠู‚ุฏุฑ ูŠุนู…ู„ู‡ุŒ ูˆุงู„ุญุงุฌุงุช ุงู„ู„ูŠ ู…ุด ู…ุณู…ูˆุญ ู„ู‡ ูŠูˆุตู„ ู„ู‡ุง.

ุงุณุชุฎุฏุงู… Microsoft Identity Package

ุนุดุงู† ู†ุณุฑุน ุนู…ู„ูŠุฉ ุชุทูˆูŠุฑ ุงู„ู€ Security ModuleุŒ ุจู†ุณุชุฎุฏู… ุญุฒู…ุฉ ุฌุงู‡ุฒุฉ ู…ู† ู…ุงูŠูƒุฑูˆุณูˆูุช ุงุณู…ู‡ุง Identity. ุงู„ุญุฒู…ุฉ ุฏูŠ ุจุชูŠุฌูŠ ู…ุฏู…ุฌุฉ ููŠู‡ุง ู…ุฌู…ูˆุนุฉ ุฎุฏู…ุงุช ุฌุงู‡ุฒุฉ ุจุชุณุงุนุฏู†ุง ุนู„ู‰ ุชู†ููŠุฐ ุงู„ู…ู‡ุงู… ุงู„ู…ุทู„ูˆุจุฉ ุจุดูƒู„ ุฃุณู‡ู„ ูˆุฃุณุฑุน.

ุฎุฏู…ุงุช Microsoft Identity ุงู„ุฃุณุงุณูŠุฉ

  1. UserManager:

    • ุฎุฏู…ุฉ ุจุชุณุงุนุฏู†ุง ุนู„ู‰ ุฅุฏุงุฑุฉ ุงู„ู…ุณุชุฎุฏู…ูŠู† ููŠ ุงู„ุชุทุจูŠู‚ุŒ ูˆุชูˆูุฑ ู„ู†ุง ูˆุธุงุฆู ุฒูŠ:
      • ุฅู†ุดุงุก ู…ุณุชุฎุฏู… ุฌุฏูŠุฏ (Create)
      • ุชุญุฏูŠุซ ุจูŠุงู†ุงุช ุงู„ู…ุณุชุฎุฏู… (Update)
      • ุญุฐู ู…ุณุชุฎุฏู… (Delete)
      • ุงู„ุจุญุซ ุนู† ู…ุณุชุฎุฏู… ุจูˆุงุณุทุฉ ุจูŠุงู†ุงุชู‡ (Find by)
  2. SignInManager:

    • ุฎุฏู…ุฉ ุจุชุณุงุนุฏู†ุง ุนู„ู‰ ุชู†ููŠุฐ ุนู…ู„ูŠุงุช ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ูˆุชูˆูุฑ ุฅู…ูƒุงู†ูŠุงุช ุฅุถุงููŠุฉ ุฒูŠ:
      • ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ (Sign in)
      • ุฅุนุงุฏุฉ ุชุนูŠูŠู† ูƒู„ู…ุฉ ุงู„ู…ุฑูˆุฑ (Reset Password)
      • ุงู„ุชุญู‚ู‚ ุจุฎุทูˆุชูŠู† (Two Factor Authentication)
      • ุชุณุฌูŠู„ ุงู„ุฏุฎูˆู„ ู…ู† ู…ุตุงุฏุฑ ุฎุงุฑุฌูŠุฉ (External Login)
  3. RoleManager:

    • ุฎุฏู…ุฉ ู„ุฅุฏุงุฑุฉ ุงู„ุฃุฏูˆุงุฑ ูˆุงู„ุตู„ุงุญูŠุงุชุŒ ูˆุชุชูŠุญ ู„ู†ุง ุงู„ูˆุธุงุฆู ุงู„ุชุงู„ูŠุฉ:
      • ุฅู†ุดุงุก ุฏูˆุฑ ุฌุฏูŠุฏ (Create)
      • ุชุญุฏูŠุซ ุงู„ุจูŠุงู†ุงุช ุงู„ุฎุงุตุฉ ุจุงู„ุฏูˆุฑ (Update)
      • ุญุฐู ุฏูˆุฑ (Delete)
      • ุชุนูŠูŠู† ู…ุณุชุฎุฏู… ู„ุฏูˆุฑ ู…ุนูŠู† (Assign User to Role)

ุงู„ูƒูŠุงู†ุงุช ุงู„ุฃุณุงุณูŠุฉ ููŠ Security Module

ุจูŠูƒูˆู† ุนู†ุฏู†ุง ูƒูŠุงู†ูŠู† ุฃุณุงุณูŠูŠู† ููŠ Security Module:

  1. User (ุงู„ู…ุณุชุฎุฏู…):

    • ุงู„ูƒู„ุงุณ ุงู„ุฎุงุต ุจุงู„ู…ุณุชุฎุฏู… ููŠ Microsoft Identity ู‡ูˆ IdentityUserุŒ ูˆุจูŠุญุชูˆูŠ ุนู„ู‰ ุนุฏุฉ ุฎุตุงุฆุต (Properties) ู…ุซู„:
      • ID
      • Username
      • NormalizedUsername
      • Email
      • NormalizedEmail
      • PhoneNumber
      • ูˆุฎุตุงุฆุต ุฃุฎุฑู‰ ู„ุฅุฏุงุฑุฉ ุงู„ู…ุณุชุฎุฏู…
  2. Role (ุงู„ุฏูˆุฑ):

    • ูƒู„ุงุณ ุฎุงุต ุจุฅุฏุงุฑุฉ ุงู„ุฃุฏูˆุงุฑ ูˆุงู„ุตู„ุงุญูŠุงุช ุงู„ู„ูŠ ุจูŠู…ุชู„ูƒู‡ุง ูƒู„ ู…ุณุชุฎุฏู…. ูŠุชูŠุญ ู„ู†ุง ุชุฎุตูŠุต ูƒู„ ุฏูˆุฑ ุจู…ู‡ุงู… ู…ุนูŠู†ุฉ ุฃูˆ ุตู„ุงุญูŠุงุช ุฏุงุฎู„ ุงู„ุชุทุจูŠู‚.

Customization

ู…ู…ูƒู† ู†ุนู…ู„ ุชุฎุตูŠุต (Customization) ู„ู„ู€ Identity classes ุนุดุงู† ุชู†ุงุณุจ ุงุญุชูŠุงุฌุงุช ุงู„ุชุทุจูŠู‚ ุจุดูƒู„ ุฃูุถู„. ุจู†ุนู…ู„ ูƒู„ุงุณ ุฎุงุต ุจูŠู†ุง ูˆู†ุณู…ูŠู‡ ู…ุซู„ู‹ุง AppUserุŒ ูˆุงู„ู„ูŠ ุจูŠูˆุฑุซ ู…ู† ุงู„ูƒู„ุงุณ ุงู„ุฌุงู‡ุฒ IdentityUserุŒ ูˆุจูƒุฏู‡ ู†ู‚ุฏุฑ ู†ุถูŠู ุฃูˆ ู†ุนุฏู„ ุงู„ุฎุตุงุฆุต ุนู„ู‰ ุญุณุจ ุงู„ู…ุชุทู„ุจุงุช.

ุจู†ูุณ ุงู„ุทุฑูŠู‚ุฉุŒ ู…ู…ูƒู† ู†ุนู…ู„ ุชุฎุตูŠุต ู„ูƒู„ุงุณ ุงู„ู€ Role ุจุฅู†ุดุงุก ูƒู„ุงุณ ุฎุงุต ุจุงุณู… ู…ุซู„ู‹ุง AppRoleุŒ ูˆุงู„ู„ูŠ ุจูŠูˆุฑุซ ู…ู† IdentityRole. ุฏู‡ ุจูŠุณุงุนุฏู†ุง ุฅู†ู†ุง ู†ุชุญูƒู… ููŠ ู…ุนู„ูˆู…ุงุช ุงู„ู…ุณุชุฎุฏู…ูŠู† ูˆุงู„ุตู„ุงุญูŠุงุช ุจุดูƒู„ ุฃูƒุชุฑ ู…ุฑูˆู†ุฉุŒ ูˆู†ุถูŠู ุฎุตุงุฆุต ุฅุถุงููŠุฉ ุฃูˆ ู†ุนุฏู„ ููŠ ูƒูŠููŠุฉ ุงู„ุชุนุงู…ู„ ู…ุน ุงู„ุจูŠุงู†ุงุช ุงู„ุฎุงุตุฉ ุจูƒู„ ู…ุณุชุฎุฏู… ุฃูˆ ุฏูˆุฑ.

Using it

Installing Package

ู‡ู†ุฑูˆุญ ู„ู„ู€ Dependencies ุจุชุงุน ุงู„ู€ Core ูˆู†ุถูŠู ุงู„ุจุงูƒุฏุฌ ุฏูŠ Identity.EntityFrameWorkCore ูˆู†ู†ุฒู„ ุขุฎุฑ ู†ุณุฎุฉ ู…ู†ู‡ุง

Entity

ู†ุนู…ู„ ููˆู„ุฏุฑ ูุงู„ู€ Core ุฒูŠ ู…ุง ู‚ูˆู„ู†ุง ุฌูˆุง ููˆู„ุฏุฑ ุงู„ู€ Entities ู‡ู†ุนู…ู„ ููˆู„ุฏุฑ Identity

ูˆู†ุนู…ู„ ุฌูˆุงู‡ ุงู„ู€ AppUser ุจุชุงุนู†ุง ูˆู†ุฎู„ูŠู‡ ูŠูˆุฑุซ ู…ู† ุงู„ู€ IdentityUser ูˆููŠู‡ ุงุชู†ูŠู† ูˆุงุญุฏ Generic ูˆุงู„ุชุงู†ูŠ Non Generic ูู„ูˆ ุงุณุชุฎุฏู…ู†ุง ุฏูŠ ุฏุงูŠู…ู‹ุง ุงู„ู€ ID ุจุชุงุนู†ุง ู‡ูŠูƒูˆู† String ู„ูˆ ุนุงูŠุฒู‡ ูŠุจู‚ุง ุญุงุฌุฉ ุบูŠุฑ ุงู„ู€ String ู‡ู†ูˆุฑุซ ู…ู† ุงู„ู€ Generic

public class AppUser : IdentityUser
{
	public string DisplayName {get; set;}
	public Address Address {get; set;}
	// ู‡ู†ุนู…ู„ ู†ูˆุน ุงุณู…ู‡ ุงุฏุฑูŠุณ
}
 
public class Address
{
	public int Id {get; set;}
	public string FName {get; set;}
	public string LName {get; set;}
	public string Street {get; set;}
	public string City {get; set;}
	public string Country {get; set;}
 
	public string AppUserId {get; set;} // Foreign Key: User
}

ุงู„ู€ Security ู‡ู†ุนู…ู„ู‡ุง Database ู…ู†ูุตู„ุฉ ุชู…ุงู…ู‹ุง ุนุดุงู† ูƒุฏุง ู„ูˆ ุฎุฏุช ุจุงู„ูƒ ู‡ุชู„ุงู‚ูŠ ุงู† ุงู„ู€ Address ู…ูˆุฑุซุชุด ู…ู† ุงู„ู€ BaseEntity ู„ุฃู† ุงู„ู€ BaseEntity ู‡ูˆ ุงู„ู€ Base Class ู„ู„ู€ Entities ุงู„ุฎุงุตุฉ ุจุงู„ู€ StoreContext ูˆู…ู…ูƒู† ุชุณุชุฎุฏู…ู‡ุง ุนุงุฏูŠ ุจุณ ู‡ูŠู„ุบุจุท ุงู„ู„ูŠ ู‡ูŠู‚ุฑุฃ ุงู„ูƒูˆุฏ ูุจู„ุงุด

ู…ุด ู‡ู†ู‚ุฏุฑ ู†ุนู…ู„ BaseEntity ู„ู„ Security ุนุดุงู† ุงู„ู€ Id ููŠ ุงู„ู€ Address ู†ูˆุนู‡ Int ุงู†ู…ุง ููŠ ุงู„ู€ User ุจูŠุจู‚ุง String ูˆููŠ ุงู„ุญู‚ูŠู‚ุฉ ู…ุด ู…ุญุชุงุฌู‡

ูˆุจุฑุถูˆ ููŠู‡ First name ูˆ Last name ุนุดุงู† ู…ู…ูƒู† ุญุฏ ุชุงู†ูŠ ูŠุณุชู‚ุจู„ ุงู„ู€ Order

ูˆุจุนุฏูŠู† ู†ุธุจุท ุงู„ุนู„ุงู‚ุฉ ุจูŠู† ุงู„ู€ User ูˆุงู„ู€ Address ู„ุฃู†ู‡ุง 1:1 ูู‡ู†ุญุท ุงู„ู€ Key ุจุชุงุน ุงู„ู€ user ููŠ ุงู„ู€ Address ู„ุฃู† ู…ุด ู„ุงุฒู… ูƒู„ User ูŠุจู‚ุง ุนู†ุฏู‡ Address ุฃูˆู„ ู…ุง ูŠุนู…ู„ Account ูุงู„ู€ Address ุชุนุชุจุฑ May

DbContext

ู‡ู†ุนู…ู„ DbContext ู„ู„ู€ Security ุฒูŠ ู…ุง ุงุชูู‚ู†ุง ู‡ู†ุนู…ู„ ููŠ ู†ูุณ ุงู„ู€ Repository Layer ู†ูุณ ุงู„ุชู‚ุณูŠู…ุฉ ุนุงุฏูŠ ุจุณ ู„ู„ู€ Security

ูˆู„ุณุง ุงู„ู€ Migrations ูˆู†ุญุท ูƒู…ุงู† ุงู„ู€ DbContext Class ุจุณ ุงู„ูุฑู‚ ู‡ู†ุง ู‡ูŠูˆุฑุซ ู…ู† ุงู„ู€ IdentityDbContext ู…ุด ุงู„ุนุงุฏูŠุฉ ุนุดุงู† ูŠูˆุฑุซ ุงู„ู€ 7 DbSet

public class AppIdenetityDbContext : IdentityDbContext<AppUser>
{
	public AppIdentityDbContext(DbContextOptions<AppIdentityDbContext options) 
		: base(options)
	{
	}
	// We inhertid 7 Dbset
	// We can use `OnConfiguraing`
}

ุนู†ุฏู†ุง 3 ู†ุณุฎ ู…ู† ุงู„ู€ IdentityDbContext:

  • ุงู„ุนุงุฏูŠุฉ ูˆุฏูŠ ุจุชุงุฎุฏ ุงู„ู€ IdentityUser ุจุณ ูุฃู†ุช ู„ูˆ ุนุงู…ู„ Custom User ู…ุด ู‡ูŠู†ูุน
  • ุงู„ู€ Generic ูˆุฏูŠ ู‡ูŠู†ูุน ุชุณุชุฎุฏู…ู‡ุง ู…ุน ุงู„ู€ Custom User
  • ูˆูƒู…ุงู† ูˆุงุญุฏุฉ

ูˆู‡ู†ุญุทู‡ุง ููŠ ุงู„ู€ program ุฒูŠ ู…ุง ุงุชูู‚ู†ุง ูˆู‡ู†ุฒูˆุฏ ุงู„ู€ Connection string ููŠ ุงู„ู€ appsettings

"IdentityConnection": "Connection String"
 
builder.Services.AddDbContext<AppIdentityDbContext>(option =>
			options.UseSqlServer("connectionString"));
 
// connections string: builder.Configuration.GetConnectionString("IdentityConnection")
// "SQL server ุนุงุฏูŠ"

ุดุฑุญู†ุง ุงุฒุงูŠ ุชุงู†ูŠ ููŠ ุงู„ู€ DbContext

ู„ู…ุง ุญุฏ ูŠุญุจ ูŠูุชุญ Connection ู…ุน ุงู„ู€ DB ุจุชุงุน ุงู„ู€ Security ุฃูˆ ุงู„ู€ Identity:

  1. ู‡ูŠุฑูˆุญ ูŠุนู…ู„ Object ู…ู† ุงู„ู€ Class ุงู„ู„ูŠ ุงุณู…ู‡ AppIdentityDbContext ูุจุฏู„ ู…ุง ูŠุนู…ู„ู‡ ู‡ูˆ ุจูŠุฎู„ูŠ ุงู„ู€ CLR ูŠุนู…ู„ู‡ (DI)
  2. ุจุณ ุงู†ุดุงุกู‡ ู…ุนุชู…ุฏ ุนู„ู‰ ุงู„ู€ DbContextOptions ู‡ูˆ ู‡ูŠุฑูˆุญ ูŠุนู…ู„ Create ู„ู„ู€ Options ูˆูŠุจุนุชู‡ุง
  3. ูุฃู†ุง ุจู‚ูˆู„ู‡ ูˆุงู†ุช ุจุชุนู…ู„ Create ู„ู„ู€ Options ูุจูŠุจุนุช ู…ุนุงู‡ ุงู„ู€ Connection string ูุงุญู†ุง ุจู†ุนู…ู„ู‡ุง ุฒูŠ ู…ุง ุนู…ู„ู†ุงู‡ุง ุฃูˆ ู†ุนู…ู„ Override ู„ู„ู€ OnConfiguring

ู„ูˆ ููŠู‡ ุฃูŠ Properties ุฒูŠุงุฏุฉ ุจู†ุนู…ู„ู‡ุง DbSet ู„ูˆ ุฃู†ุง ุนุงูŠุฒู‡ุง ุชุชุนู…ู„ ูŠุนู†ูŠ ููŠ ุงู„ู…ุซุงู„ ุจุชุงุนู†ุง ู„ูˆ ูƒู†ุง ู…ุญุชุงุฌูŠู† ู†ุนู…ู„ ุฌุฏูˆู„ ู„ู„ู€ Address ูƒู†ุง ู‡ู†ุนู…ู„ู‡ DbSet ุจุณ ููŠ ุงู„ู€ DbContext ูˆู‡ูˆ ูƒุงู† ู‡ูŠุนู…ู„ Table ู„ู‡ ู„ุฃู†ู‡ ููŠ ุนู„ุงู‚ุฉ ู…ุน ุงู„ู€ User

ูˆู„ูˆ ู…ุด ู‡ุถูŠู ุญุงุฌุฉ ู„ู„ุฌุฏูˆู„ ุฃูˆ ุฃุบูŠุฑ ุญุงุฌุฉ ู…ุด ู…ุญุชุงุฌ ุฃุนู…ู„ OnModelCreating

ุฃุตู„ู‹ุง ุงู„ู€ Identity ููŠู‡ 7 DbSet ุจุณ ุงุญู†ุง ูˆุฑุซู†ุง ุงู„ู€ IdentityDbContext ููˆุฑุซู†ุงู‡ุง ู…ู†ู‡

Migration

ู‡ู†ุนู…ู„ Migration ุจุงู„ุทุฑูŠู‚ุฉ ุงู„ุนุงุฏูŠุฉ ููŠ ุจุฑูˆุฌูƒุช ุงู„ู€ Repository ุจุณ ุงู„ู…ุฑุงุฏูŠ ู„ุงุฒู… ู†ุญุฏุฏ ุฃูŠ Context ุจุณุจุจ ุงู†ู†ุง ุนู†ุฏู†ุง ุงุชู†ูŠู† Context

Add-Migration "IdentityInitialCreate" -Context AppIdentityDbContext -Output Identity/Migrations

ูˆุฃูŠ ุชุนุงู…ู„ ุจุนุฏ ูƒุฏุง ู„ุงุฒู… ุชุญุฏุฏ ุงู„ู€ Context ุจุชุงุนู†ุง ูŠุนู†ูŠ ู…ุซู„ู‹ุง ู„ูˆ ุนุงูŠุฒ ุฃุญุฐู ุงู„ Migration

Remove-Migration -Context AppIdentityDbContext

Update Database

ูƒู†ุง ุงุชูƒู„ู…ู†ุง ุนู„ูŠู‡ุง ููŠ ุงู„ู€ Database Updating

ุฒูŠ ู…ุง ูƒู†ุง ุจู†ุทู„ุจ Object ู…ู† ุงู„ู€ StoreContext ู‡ู†ุทู„ุจ Object ู…ู† ุงู„ู€ AppIdentityDbContext

var scope = app.Services.CreateScope();
var services = scope.ServiceProvider;
// ู‡ู†ุนู…ู„ ุฏุง ุจุณ
var _identityContext = services.GetService<AppIdentityDbContext>();
 
try
{
	await _identityContext.Database.MigrateAsync();
}

Data Seeding

ุงุชูƒู„ู…ู†ุง ุนู†ู‡ุง ู‚ุจู„ ูƒุฏุง ููŠ ุงู„ู€ Data Seeding ุงู„ู…ุฑุงุฏูŠ ู‡ุนู…ู„ Seeding ู„ู€ User ูˆุงุญุฏ ุจุณ ู…ุด ูƒู„ู‡ ุฒูŠ ุงู„ู…ุฑุฉ ุงู„ู„ูŠ ูุงุชุช

  • ู‡ู†ู…ุณุญ ููˆู„ุฏุฑ ุงู„ู€ Seeding ู…ุด ู…ุญุชุงุฌูŠู†ู‡
  • ู‡ู†ุนู…ู„ ูƒู„ุงุณ ููŠ ุงู„ู€ Identity ุงุณู…ู‡ AppIdentityDbContextSeed
  • ุจุณ ู‡ู†ุง ุนุดุงู† ู†ุนู…ู„ User ู…ุด ุจู†ูƒู„ู… ุงู„ู€ DbContext ุจุดูƒู„ ู…ุจุงุดุฑ ุจุณ ุจู†ูƒู„ู… ุงู„ู€ UserManager ูุฏุง ุงุฎุชู„ุงู ูƒู…ุงู†
    • ูˆุฏุง ุนุดุงู† ุฃุนู…ู„ Create ู„ู„ู€ User
public static class AppIdentityContextSeed
{
	public static async Task SeedUsersAsync(UserManager<AppUser> _userManager)
	{
		// !_userManager.Users.Any()
		if(_userManager.Users.Count() == 0)
		{
			var user = new AppUser()
			{
				DisplayName = "Mahmoud Feshar",
				Email = "mahmoudfeshar11@gmail.com",
				UserName = "mahfeshar",
				PhoneNumber = "01289086935"
			};
			await _userManager.CreateAsync(user, "Pa$$w0rd");
		}
	}
}

ูˆุจุนุฏูŠู† ู†ุณุชุฎุฏู…ู‡ุง ููŠ ุงู„ู€ Program ุฒูŠ ุงู„ู…ุฑุงุช ุงู„ู„ูŠ ูุงุชุช ุจุณ ุจุฑุถูˆ ููŠู‡ ุงุฎุชู„ุงู

var _userManager = services.GetRequiredService<UserManager<AppUser>>();
await AppIdentityDbContextSeed.SeedUsersAsync(_userManager);

ุจุณ ู„ุญุฏ ู‡ู†ุง ู…ุด ู‡ูŠุดุชุบู„ ู„ุฃู†ู†ุง ู…ุญุชุงุฌูŠู† ู†ุนู…ู„ Allow ุงู„ู€ DI ูˆุฏุง ู‡ู†ุนู…ู„ู‡ ุนู† ุทุฑูŠู‚ ุงู„ู€ AppIdentity ุจูƒู„ ุจุณุงุทุฉ ู‡ูŠ ุจุชุฑูˆุน ุชุนู…ู„ Add ู„ู„ู€ Identity Services ูˆุจุชุนู…ู„ู‡ Allow ู„ู„ู€ DI ููŠ ุงู„ูƒูˆู†ุชูŠู†ุฑ ุงู„ุฎุงุต ุจูŠู‡ ูˆููŠู‡ุง 3 Overload:

  • ุงู„ุฃูˆู„ ู…ุด ุจูŠุงุฎุฏ ุฃูŠ Parameters ูˆู‡ูˆ ุจุณ ุจูŠุนู…ู„ Add ู„ู„ู€ Default Configurations
  • ุงู„ุชุงู†ูŠ ุจูŠุนู…ู„ Add ูˆุจูŠุนู…ู„ Configure ูƒู…ุงู† ู„ู„ู€ Options ุจุชุงุน ุงู„ู€ Identity
builder.Services.AddIdentity<AppUser, IdentityRole>(options =>
{
	options.Password.RequiredUniqueChars = 2;
	options.Password.RequiredNonAlphanumeric = true;
	options.Password.RequireUppercase = true;
	options.Password.RequireLowercase = true;
});

ูุฃู†ุง ุนู…ู„ุช Configure ู„ู„ู€ Password ูˆููŠู‡ ุญุงุฌุงุช ุชุงู†ูŠุฉ ูƒุชูŠุฑ ู…ู…ูƒู† ุฃุนู…ู„ู‡ุง Configure ุชุงู†ูŠุฉ ู‡ู†ุชูƒู„ู… ุนู„ูŠู‡ุง ุงู„ู€ Session ุงู„ุฌุงูŠุฉ ุจุณ ุงู†ุง ู…ุด ู‡ุนู…ู„ Configure ูƒุฏุง ู„ู„ุจุงุณูˆุฑุฏ ุฃู†ุง ู‡ุดูˆู ู„ู…ุง ูŠูŠุฌูŠ ูŠุนู…ู„ Register ู‡ุนู…ู„ Regex ุนู„ูŠู‡


  • ุนุดุงู† ุฃุนู…ู„ Seed ู„ู„ู€ Users ู…ุญุชุงุฌ ูŠุจู‚ุง ู…ุนุงูŠุง Object ู…ู† ูƒู„ุงุณ ุงู„ู€ UserManager ูุทู„ุจุช ู…ู† ุงู„ู€ CLR ูŠุนู…ู„ู‡ูˆู„ูŠ ูู‡ูŠุนู…ู„ู‡
  • ูˆู‡ูˆ ุจูŠุนู…ู„ ุงู„ู€ Object ู‡ูŠู†ูุฐ Ctor ุจูŠุนุชู…ุฏ ุนู„ู‰ ุงู„ู€ IUserStore ุงู„ู„ูŠ ููŠู‡ ุงู„ู€ Create ุงู„ู„ูŠ ุงู†ุง ุงุณุชุฎุฏู…ุชู‡ุง
  • ู…ุญุชุงุฌ ุฃุนู…ู„ Allow ู„ู„ู€ DI ุจุงู„ู†ุณุจุฉ ู„ู„ู€ UserStore ูˆู‡ูˆ ุจู…ุซุงุจุฉ ุงู„ู€ UserRepository
  • ูุงู†ุง ุจุนู…ู„ ู„ูƒู„ ุงู„ู€ Stores

ุนุดุงู† ูƒุฏุง ู‡ุนู…ู„:

builder.Services.AddIdentity<AppUser, IdentityRole>()
		.AddEntityFrameworkStores<AppIdentityDbContext>();