Asp Net Core 7 Identity
Create Project Web MVC Empty
dotnet new web -o WebApp
Install Identity
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
Install Entity Framework Core Sql Server
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Install Entity Framework Core Design
dotnet add package Microsoft.EntityFrameworkCore.Design
Create Database Context
public class DatabaseContext : IdentityDbContext{
public DatabaseContext(DbContextOptions options):base(options){}
}
Register Database Context
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddDbContext<DatabaseContext<(p =>
p.UseSqlServer(builder.Configuration.GetConnectionString("Store")));
builder.Services.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<DatabaseContext>().AddDefaultTokenProviders();
Configuration Constraint Password
builder.Services.Configure<IdentityOptions>(p => {
p.Password.RequireDigit = false;
p.Password.RequiredLength = 3;
p.Password.RequireLowercase = false;
p.Password.RequireNonAlphanumeric = false;
p.Password.RequireUppercase = false;
p.Password.RequiredUniqueChars = 1;
});
Generate Table Identity
Install tool dotnet-ef
dotnet tool install --global dotnet-ef
Generate table
dotnet ef migrations add InitialCreate --context DatabaseContext
dotnet ef database update --context DatabaseContext
Create class UserRepository
class UserRepository{
readonly UserManager<IdentityUser> manager;
public UserRepository(UserManager<IdentityUser> manager){
this.manager = manager;
}
}
Create method Add User in class UserRepository
public async Task<IdentityResult> Add(RegisterModel obj){
var user = new IdentityUser{
UserName = obj.UserName,
Email = obj.Email,
PhoneNumber = obj.Phone
};
return await manager.CreateAsync(user, obj.Password);
}
Create method Login in class UserRepository
public async Task<IdentityUser?> Login(LoginModel obj){
var user = await manager.FindByNameAsync(obj. U);
if(user != null){
if(await manager.CheckPasswordAsync(user, obj.P)){
return user;
}
}
return null;
}
Generate two Factor Token
public async Task<string> GenerateTwoFactorToken(IdentityUser obj, string provider){
return await manager.GenerateTwoFactorTokenAsync(obj, provider);
}
Confirm Two Factor Token
public async Task<bool> ConfirmTwoFactorToken(TwoFactor obj){
var user = await manager.FindByIdAsync(obj.Id);
if(user != null){
return await manager.VerifyTwoFactorTokenAsync(user, obj.Provider, obj.Token);
}
return false;
}
Generate Password Reset Token
public async Task<ResetPassword?> GeneratePasswordResetToken(string email){
IdentityUser? user = await manager.FindByEmailAsync(email);
if(user != null){
return new ResetPassword{
Token = HttpUtility.UrlEncode(await manager.GeneratePasswordResetTokenAsync(user)),
Id = user.Id
};
}
return null;
}
Reset Password
public async Task<IdentityResult?> ResetPassword(ResetPassword obj){
IdentityUser? user = await manager.FindByIdAsync(obj.Id);
if(user != null){
return await manager.ResetPasswordAsync(user, HttpUtility.UrlEncode(obj.Token), obj.Password);
}
return null;
}