🎯 টপিক ১: ASP.NET Core MVC কী এবং কীভাবে কাজ করে?
✅ MVC এর পূর্ণরূপ:
Model – View –
Controller
এই প্যাটার্নটি
একটি ওয়েব অ্যাপ্লিকেশনকে তিনটি আলাদা ভাগে ভাগ করে:
অংশ |
কাজ |
Model |
ডেটা,
ডেটার নিয়ম
এবং
ডেটাবেজ এর
সাথে
যোগাযোগ |
View |
ইউজারের সাথে
যোগাযোগ (HTML UI) |
Controller |
ইউজারের রিকোয়েস্ট গ্রহণ করে,
প্রসেস করে,
এবং
উপযুক্ত View ফেরত দেয় |
🧭 টপিক ২: নতুন
ASP.NET Core MVC প্রোজেক্ট তৈরি
(Visual Studio দিয়ে)
🧰 প্রযোজনীয় সফটওয়ার ইনস্টল করুন
- Visual Studio 2022+
- .NET 6 বা .NET 7 SDK
- SQL Server Express (বা অন্য কোনো DB)
▶️ ধাপে
ধাপে:
1. Visual Studio ওপেন করুন
2. Create a new project এ ক্লিক করুন
3. সিলেক্ট করুন: ASP.NET Core Web App
(Model-View-Controller)
4. প্রজেক্টের নাম দিন: MvcBanglaApp
5. .NET version দিন: .NET 6/7/8 (LTS)
- Authentication: Individual Accounts (ASP.NET Core Identity)
- Configure for HTTPS: Checked
→ Create ক্লিক করুন
আপনার প্রথম MVC প্রোজেক্ট তৈরি হয়ে যাবে।
🧩 টপিক ৩: আপনার
প্রোজেক্টে যেসব
ফোল্ডার আছে
ফোল্ডার/ফাইল |
ব্যাখ্যা |
Controllers |
Controller ফাইল থাকে যেমন HomeController.cs |
Views |
HTML-like Razor ফাইল থাকে যেমন Index.cshtml |
Models |
ডেটার ক্লাস থাকে |
Program.cs |
অ্যাপ কনফিগারেশন |
wwwroot |
Static files (CSS, JS, images) |
👨💻 টপিক ৪: প্রথম
Controller তৈরি
✅ ফাইল
তৈরি করুন:
Controllers/HelloController.cs
Solution Explorer-এ আপনার প্রজেক্টে
Controllers
ফোল্ডারটি খুঁজে বের করুন-
Controllers
ফোল্ডারে Right Click > Add > Controller
যদি Scaffold ব্যবহার না করেন: Right Click > Add > Class করে ফাইল তৈরি করলেও চলবে।
using Microsoft.AspNetCore.Mvc;
namespace MvcBanglaApp.Controllers
{
public class HelloController : Controller
{
public IActionResult Index()
{
ViewBag.Message = "স্বাগতম, আপনি এখন ASP.NET Core MVC শিখছেন!";
return View();
}
}
}
🖼️ টপিক ৫: View তৈরি
✅ ফোল্ডার
ও ফাইল:
·
Views → Hello → Index.cshtml (নতুন ফোল্ডার + ফাইল)
@{
ViewData["Title"] = "হ্যালো পেজ";
} <h2>@ViewBag.Message</h2>
🌐 এখন রানে দেখুন:
Visual Studio থেকে ▶️ (Run) করুন
ব্রাউজারে যান:
https://localhost:xxxx/Hello
🎉 আপনি এখন আপনার প্রথম Custom Controller ও View সফলভাবে চালু করেছেন।
📌 টপিক: ASP.NET Core MVC Routing (বাংলায়)
🔍 Routing কী?
Routing হচ্ছে সেই প্রক্রিয়া যেটা নির্ধারণ করে যে ইউজার যখন কোনো URL এ যায়, তখন কোন Controller এবং কোন Action Method চালু হবে।
উদাহরণ:
https://localhost:5001/Hello/Index
এই URL মানে:
·
Controller: HelloController
·
Action
Method: Index()
🧩 রাউটিং কোথায় সেট করা থাকে?
ASP.NET Core এ routing setup করা হয় Program.cs ফাইলে (আগে Startup.cs ছিল):
app.MapControllerRoute(
name: "default", pattern: "{controller=Home}/{action=Index}/{id?}");
ব্যাখ্যা:
অংশ |
অর্থ |
{controller=Home} |
Default Controller — যদি URL-এ কিছু না
দেওয়া থাকে |
{action=Index} |
Default Action Method |
{id?} |
ঐচ্ছিক প্যারামিটার (যদি
থাকে) |
🔄 উদাহরণ দিয়ে বুঝি
✅ Controller:
//
Controllers/ProductController.cs
using
Microsoft.AspNetCore.Mvc; namespace MvcBanglaApp.Controllers { public class ProductController : Controller { public IActionResult Index() { return Content("এটি
Product Controller এর Index Method");
} public
IActionResult Details(int id) { return Content($"প্রোডাক্ট
আইডি: {id}"); } } }
✅ Access করার
জন্য URL:
URL |
ব্যাখ্যা |
/Product |
চালাবে ProductController এর Index() method |
/Product/Details/5 |
চালাবে Details(int id) এবং id = 5 |
💡 Custom Route কীভাবে বানাব?
app.MapControllerRoute(
name: "custom", pattern: "our-products/{id?}", defaults: new { controller = "Product", action = "Details" });
এখন এই URL চালালে:
/our-products/5
→ চালাবে: ProductController
→ Details(5)
📌 সংক্ষেপে মনে রাখুন
URL |
কাজ |
/ |
HomeController → Index() |
/ControllerName |
Controller → Index() |
/Controller/Action |
নির্দিষ্ট Method |
/Controller/Action/id |
প্যারামিটার সহ
Method |
🔍 আপনার চর্চার জন্য
কাজ:
1. UserController বানান
2. তাতে Profile(int
id) method যোগ করুন
3. URL দিয়ে পরীক্ষা করুন /User/Profile/10
🧱 টপিক: Model কী এবং কিভাবে View-তে ডেটা
পাঠাব?
🔍 Model কী?
Model হচ্ছে একধরনের ক্লাস, যেটা ডেটার স্ট্রাকচার (গঠন) নির্ধারণ করে। যেমন, Student, Product, Employee ইত্যাদি।
🎯 Step-by-Step: Model → Controller →
View
🧩 Step 1: একটি Model তৈরি করি
✅ Models/Student.cs
namespace MvcBanglaApp.Models { public class Student { public int Id { get; set; } public string Name { get; set; } public string Department { get; set; } } }
🧩 Step 2: Controller থেকে Model এর ডেটা
পাঠানো
✅ Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc; using MvcBanglaApp.Models; namespace MvcBanglaApp.Controllers { public class StudentController : Controller { public IActionResult Details() { Student student = new Student() { Id = 1, Name = "মোঃ
রাহিম", Department = "কম্পিউটার সাইন্স" }; return View(student); // View-তে Model পাঠানো } } }
🧩 Step 3: View তৈরি করে Model দেখানো
✅ Views/Student/Details.cshtml
যদি ফোল্ডার Student না থাকে, তাহলে Views ফোল্ডারের মধ্যে Student নামে ফোল্ডার তৈরি করুন, তারপর Details.cshtml ফাইল তৈরি করুন।
@model
MvcBanglaApp.Models.Student <h2>ছাত্রের তথ্য</h2> <ul> <li><strong>আইডি:</strong> @Model.Id</li> <li><strong>নাম:</strong> @Model.Name</li> <li><strong>বিভাগ:</strong> @Model.Department</li> </ul>
🚀 এখন রান করে দেখুন
🔗 URL লিখুন:
https://localhost:xxxx/Student/Details
আপনি দেখবেন, ব্রাউজারে মোঃ রাহিম এর তথ্য দেখাচ্ছে — যেটা Model → Controller → View হয়ে এসেছে।
✅ Bonus: Multiple Student List পাঠানো (Optional Practice)
Controller:
public IActionResult AllStudents() { var students = new List<Student>() { new Student(){ Id = 1, Name = "রাহিম", Department = "CSE" }, new Student(){ Id = 2, Name = "করিম", Department = "EEE" }, new Student(){ Id = 3, Name = "সাব্বির", Department = "BBA" } }; return View(students); }
View:
@model List<MvcBanglaApp.Models.Student>
<h2>সকল
ছাত্র</h2> <table border="1"> <tr> <th>আইডি</th> <th>নাম</th> <th>বিভাগ</th> </tr> @foreach (var s in Model) { <tr> <td>@s.Id</td> <td>@s.Name</td> <td>@s.Department</td> </tr> } </table>
🎯 টপিক: ফর্ম সাবমিট
(Form Submit) এবং POST Method
🔍 GET vs POST:
Method |
ব্যাখ্যা |
GET |
ব্রাউজারে URL দিয়ে ডেটা
আনা |
POST |
ইউজার ইনপুট (form data) সাবমিট করে
সার্ভারে পাঠানো |
🧾 উদাহরণ: আমরা একজন ছাত্র এর তথ্য
ফর্ম দিয়ে
নিবো এবং সেটা POST করে View তে দেখাবো।
✅ Step 1: Model তৈরি করি
📄 Models/Student.cs
namespace MvcBanglaApp.Models { public class Student { public string Name { get; set; } public string Department { get; set; } } }
✅ Step 2: Controller তৈরি করি
📄 Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc; using MvcBanglaApp.Models; namespace MvcBanglaApp.Controllers { public class StudentController : Controller { // Form দেখানোর জন্য (GET) [HttpGet] public IActionResult Create() { return View(); } // ফর্ম সাবমিট করার জন্য (POST) [HttpPost] public IActionResult Create(Student student) { // View-এ Submitted ডেটা দেখানোর জন্য ViewBag.Name = student.Name; ViewBag.Department =
student.Department; return View("Result"); } } }
✅ Step 3: Form View তৈরি করি
📄 Views/Student/Create.cshtml
@model
MvcBanglaApp.Models.Student <h2>নতুন ছাত্র যোগ করুন</h2> <form asp-action="Create" method="post"> <label>নাম:</label><br /> <input type="text" asp-for="Name" /><br /><br /> <label>বিভাগ:</label><br /> <input type="text" asp-for="Department" /><br /><br /> <button type="submit">সাবমিট</button> </form>
✅ Step 4: Result View তৈরি করি
📄 Views/Student/Result.cshtml
<h2>আপনার
ইনপুট</h2> <ul> <li><strong>নাম:</strong> @ViewBag.Name</li> <li><strong>বিভাগ:</strong> @ViewBag.Department</li> </ul>
🚀 ব্রাউজারে রান করুন:
🔗 URL:
https://localhost:xxxx/Student/Create
📋 এখন আপনি ফর্ম পূরণ করে Submit করলে তা POST হয়ে Controller-এ যাবে এবং নতুন View (Result) এ ইনপুট দেখাবে।
🔄 সারাংশ (Flow):
User → Form Fillup → Submit (POST) → Controller → View-এ
ডেটা দেখানো
এখন আমরা শিখবো — ASP.NET Core MVC তে Model Validation, অর্থাৎ ইউজারের ফর্ম ইনপুট সঠিক কি না সেটা যাচাই করার পদ্ধতি, পুরোটা বাংলায় উদাহরণসহ।
🎯 টপিক: Model Validation (ইনপুট
যাচাই)
🔍 কেন Validation দরকার?
ইউজার যেন ফাঁকা ইনপুট, ভুল ডেটা, বা অপ্রয়োজনীয় তথ্য না দিতে পারে, সে জন্য ইনপুট যাচাই (Validation) করা হয়।
✅ Step 1: Model-এ Validation Attribute যোগ করা
📄 Models/Student.cs
using System.ComponentModel.DataAnnotations; namespace MvcBanglaApp.Models
{ public
class
Student
{ [Required(ErrorMessage = "নাম অবশ্যই দিতে হবে")] [StringLength(50, ErrorMessage = "নাম সর্বোচ্চ ৫০ অক্ষর হতে পারে")] public string Name { get; set; } [Required(ErrorMessage = "বিভাগ
অবশ্যই দিতে হবে")] public string Department { get; set; } } }
✅ Step 2: Controller একই রাখুন (POST Method সহ)
📄 Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc; using MvcBanglaApp.Models; namespace MvcBanglaApp.Controllers { public class StudentController : Controller { [HttpGet] public IActionResult Create() { return View(); } [HttpPost] public IActionResult Create(Student student) { if (ModelState.IsValid) { //
Valid হলে Result View-এ দেখাব
ViewBag.Name = student.Name; ViewBag.Department = student.Department; return View("Result");
} // যদি ইনপুট ভুল হয়, আবার ফর্ম দেখাবো (with errors)
return
View(student); } } }
✅ Step 3: Form View এ Validation Message দেখানো
📄 Views/Student/Create.cshtml
@model
MvcBanglaApp.Models.Student <h2>নতুন ছাত্র যোগ করুন</h2> <form asp-action="Create" method="post"> <label>নাম:</label><br /> <input type="text" asp-for="Name" /> <span style="color:red" asp-validation-for="Name"></span><br /><br /> <label>বিভাগ:</label><br /> <input type="text" asp-for="Department" /> <span style="color:red" asp-validation-for="Department"></span><br /><br /> <button type="submit">সাবমিট</button> </form> @section Scripts { @{await
Html.RenderPartialAsync("_ValidationScriptsPartial");} }
✅ asp-validation-for tag গুলো ভ্যালিডেশন এর জন্য error message দেখায়।
✅ "_ValidationScriptsPartial" ফাইলটি Views/Shared ফোল্ডারে থাকে — এটি client-side validation এর জন্য জরুরি।
✅ Step 4: ফলাফল দেখানোর জন্য Result.cshtml একই রাখুন
📄 Views/Student/Result.cshtml
<h2>আপনার
ইনপুট</h2> <ul> <li><strong>নাম:</strong> @ViewBag.Name</li> <li><strong>বিভাগ:</strong> @ViewBag.Department</li> </ul>
🚀 এখন পরীক্ষা করুন
🔗 URL:
https://localhost:xxxx/Student/Create
📋 যদি আপনি খালি ইনপুট দেন, তাহলে নিচে লাল রঙে error দেখাবে।
🧠 অতিরিক্ত Validation Attribute গুলো:
Attribute |
কাজ |
[Required] |
ফিল্ড খালি
রাখা
যাবে
না |
[StringLength(n)] |
সর্বোচ্চ n অক্ষর |
[Range(min, max)] |
সংখ্যা হলে
সীমার মধ্যে রাখতে হবে |
[EmailAddress] |
ইমেইল ঠিকানা হতে
হবে |
[Compare("OtherField")] |
দুটি
ফিল্ড মেলাতে |
✅ এখন আপনি শিখে ফেলেছেন:
✔ Model Validation
✔
Error Message দেখানো
✔
Server-side ও Client-side validation
এখন আমরা শিখবো — ASP.NET Core MVC তে Entity Framework Core ব্যবহার করে ডেটা ডাটাবেজে সংরক্ষণ (save) করা, পুরোটা বাংলায়, ধাপে ধাপে উদাহরণ সহ।
🧱 টপিক: Entity Framework Core দিয়ে
ডেটা ডাটাবেজে
সংরক্ষণ
🔍 কী শিখবো আজ?
1. Model তৈরি
2. DbContext তৈরি
3. Connection string যোগ করা
4. Database তৈরি (Migration)
5. ফর্ম থেকে ডেটা নিয়ে ডাটাবেজে সংরক্ষণ
✅ Step 1: NuGet Package ইনস্টল (EF Core)
Visual Studio >
Tools > NuGet Package Manager → Package Manager Console খুলুন, নিচের কমান্ড দিন:
Install-Package
Microsoft.EntityFrameworkCore.SqlServer Install-Package Microsoft.EntityFrameworkCore.Tools
✅ Step 2: Student Model তৈরি
📄 Models/Student.cs
using System.ComponentModel.DataAnnotations; namespace MvcBanglaApp.Models
{ public
class
Student
{ public
int
Id { get;
set;
} [Required]
public
string
Name { get; set; } [Required] public string Department { get; set; } } }
✅ Step 3: DbContext ক্লাস তৈরি
📄 Models/AppDbContext.cs
using Microsoft.EntityFrameworkCore; namespace MvcBanglaApp.Models
{ public
class
AppDbContext : DbContext { public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) { } public DbSet<Student>
Students { get; set; } } }
✅ Step 4: appsettings.json-এ Connection String যোগ করুন
"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MvcBanglaDb;Trusted_Connection=True;" }
✅ Step 5: Program.cs-এ DbContext যুক্ত করুন
using MvcBanglaApp.Models; using Microsoft.EntityFrameworkCore; var builder =
WebApplication.CreateBuilder(args); //
DbContext Add
builder.Services.AddDbContext<AppDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
builder.Services.AddControllersWithViews(); var app = builder.Build(); app.UseStaticFiles(); app.UseRouting();
app.MapControllerRoute(name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
✅ Step 6: Migration করে Database তৈরি
করুন
Visual Studio → Tools
> NuGet Package Manager > Package Manager Console
কমান্ড দিন:
Add-Migration
InitialCreate Update-Database
👉 এটাই ডাটাবেজ তৈরি করে Students টেবিল সহ।
✅ Step 7: Controller ও Form তৈরি করে ডেটা সংরক্ষণ
📄 Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc; using MvcBanglaApp.Models; namespace MvcBanglaApp.Controllers { public class StudentController : Controller { private readonly AppDbContext _context; public StudentController(AppDbContext context) { _context = context; } [HttpGet] public IActionResult Create() { return View(); } [HttpPost] public IActionResult Create(Student student) { if (ModelState.IsValid)
{ _context.Students.Add(student); _context.SaveChanges(); return RedirectToAction("Success");
} return
View(student); } public IActionResult Success() { return View(); } } }
✅ Step 8: ফর্ম View তৈরি
📄 Views/Student/Create.cshtml
@model
MvcBanglaApp.Models.Student <h2>নতুন ছাত্র যোগ করুন</h2> <form asp-action="Create" method="post"> <label>নাম:</label><br /> <input asp-for="Name" /><br /> <span style="color:red" asp-validation-for="Name"></span><br /><br /> <label>বিভাগ:</label><br /> <input asp-for="Department" /><br /> <span style="color:red" asp-validation-for="Department"></span><br /><br /> <button type="submit">Save</button> </form> @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
✅ Step 9: Success View তৈরি
📄 Views/Student/Success.cshtml
<h2>ছাত্র
সফলভাবে সংরক্ষিত হয়েছে!</h2> <a asp-controller="Student" asp-action="Create">আরও যোগ করুন</a>
✅ এখন ব্রাউজারে যান:
https://localhost:xxxx/Student/Create
🎉 ফর্ম পূরণ করে Save দিলে ডেটা ডাটাবেজে সংরক্ষিত হবে।
🔍 কিভাবে যাচাই করবেন?
1. Visual Studio → View → SQL Server Object
Explorer
2. (localdb)\mssqllocaldb → Databases → MvcBanglaDb
3. Students টেবিলে ডেটা দেখতে পারবেন
✅ আপনি
এখন শিখে
ফেলেছেন:
·
Entity Framework Core সংযুক্তি
·
Database তৈরি (Migration)
·
ফর্ম থেকে ডেটা নেওয়া
·
ডাটাবেজে সংরক্ষণ
এখন আমরা শিখবো — ASP.NET Core MVC তে ডাটাবেজে থাকা সব ডেটা লিস্ট আকারে দেখানো (List View)। আপনি আগে যে Student টেবিল বানিয়েছেন, সেটার সব তথ্য আমরা এখন টেবিল আকারে দেখাব।
🎯 টপিক: ডেটা লিস্ট
আকারে দেখানো
(List View)
✅ Step 1: Controller-এ Index Action যোগ করুন
📄 Controllers/StudentController.cs
using Microsoft.AspNetCore.Mvc; using MvcBanglaApp.Models; using System.Linq; namespace MvcBanglaApp.Controllers { public class StudentController : Controller { private readonly AppDbContext _context; public StudentController(AppDbContext context) { _context = context; } // লিস্ট দেখানোর জন্য public IActionResult Index() { var students = _context.Students.ToList(); // সব ছাত্র নিয়ে আসা return View(students); //
View-এ পাঠানো } // পূর্বের Create ও Success method এখানে থাকতে পারে } }
✅ Step 2: View তৈরি করুন
📄 Views/Student/Index.cshtml
@model List<MvcBanglaApp.Models.Student>
<h2>ছাত্র
তালিকা</h2> <table border="1" cellpadding="5" cellspacing="0"> <thead> <tr> <th>আইডি</th> <th>নাম</th> <th>বিভাগ</th> </tr> </thead> <tbody> @foreach (var s in Model) { <tr> <td>@s.Id</td> <td>@s.Name</td> <td>@s.Department</td> </tr> } </tbody> </table> <br /> <a asp-action="Create">নতুন
ছাত্র যোগ করুন</a>
🚀 এখন ব্রাউজারে চালান:
🔗 URL:
https://localhost:xxxx/Student/Index
📋 আপনি ডাটাবেজে থাকা সব ছাত্রদের তালিকা টেবিল আকারে দেখতে পাবেন।
✅ আপনি
এখন শিখলেন:
✔ Controller থেকে ডেটা নিয়ে View-তে পাঠানো
✔
List<Model> ব্যবহার করে foreach লুপে দেখানো
✔
টেবিল আকারে প্রদর্শন
এখন আমরা শিখবো — ASP.NET Core MVC তে ডেটা Edit / Update করার পদ্ধতি (ফর্ম দিয়ে)। অর্থাৎ ডাটাবেজে আগে থেকে থাকা কোনো ছাত্রের তথ্য ফর্মে এনে তা পরিবর্তন করে আবার সংরক্ষণ করবো।
🎯 টপিক: ডেটা Edit / Update (Form দিয়ে)
✅ Step 1: Controller-এ Edit GET এবং POST Method যোগ করুন
📄 Controllers/StudentController.cs
// Edit দেখানোর জন্য (GET) [HttpGet] public IActionResult Edit(int id) { var student =
_context.Students.FirstOrDefault(s => s.Id == id); if (student == null) return NotFound(); return View(student); } // Edit সাবমিট করার জন্য (POST) [HttpPost] public IActionResult Edit(Student student) { if (ModelState.IsValid)
{ _context.Students.Update(student); _context.SaveChanges(); return RedirectToAction("Index");
} return
View(student); }
✅ Step 2: Edit View তৈরি করুন
📄 Views/Student/Edit.cshtml
@model
MvcBanglaApp.Models.Student <h2>ছাত্র তথ্য পরিবর্তন করুন</h2> <form asp-action="Edit" method="post"> <input type="hidden" asp-for="Id" /> <label>নাম:</label><br /> <input asp-for="Name" /><br /> <span style="color:red" asp-validation-for="Name"></span><br /><br /> <label>বিভাগ:</label><br /> <input asp-for="Department" /><br /> <span style="color:red" asp-validation-for="Department"></span><br /><br /> <button type="submit">আপডেট করুন</button> </form> @section Scripts { @{await
Html.RenderPartialAsync("_ValidationScriptsPartial");} }
✅ Step 3: Index Page এ Edit লিংক যোগ করুন
📄 Views/Student/Index.cshtml
@model List<MvcBanglaApp.Models.Student>
<h2>ছাত্র
তালিকা</h2> <table border="1" cellpadding="5" cellspacing="0"> <thead> <tr> <th>আইডি</th> <th>নাম</th> <th>বিভাগ</th> <th>অ্যাকশন</th> </tr> </thead> <tbody> @foreach (var s in Model) { <tr> <td>@s.Id</td> <td>@s.Name</td> <td>@s.Department</td> <td> <a asp-action="Edit" asp-route-id="@s.Id">Edit</a> </td> </tr> } </tbody> </table>
🚀 এখন ব্রাউজারে টেস্ট
করুন
1. যান: https://localhost:xxxx/Student/Index
2. তালিকা থেকে Edit ক্লিক করুন
3. তথ্য পরিবর্তন করে Update বাটনে ক্লিক করুন
4. ডাটাবেজে সেই তথ্য আপডেট হয়ে যাবে
✅ আপনি
এখন শিখলেন:
✔ কিভাবে GET method দিয়ে ডেটা form এ আনা যায়
✔
কিভাবে POST method দিয়ে ডেটা আপডেট করা যায়
✔
Validation সহ ফর্ম হ্যান্ডলিং
✔
Edit লিংক তৈরি
এখন আমরা শিখবো — ASP.NET Core MVC তে ডেটা ডিলিট (Delete) করার পদ্ধতি, অর্থাৎ ডাটাবেজে থাকা কোনো ছাত্রের তথ্য ডিলিট করা।
🎯 টপিক: ডেটা Delete করা (Confirm সহ)
✅ Step 1: Controller-এ Delete Method যোগ করুন
📄 Controllers/StudentController.cs
// Confirm Page দেখানোর জন্য (GET) [HttpGet] public IActionResult Delete(int id) { var student = _context.Students.FirstOrDefault(s
=> s.Id == id); if (student == null) return NotFound(); return View(student); //
Confirm View } // ডেটা ডিলিট করার জন্য (POST) [HttpPost, ActionName("Delete")] public IActionResult DeleteConfirmed(int id) { var student = _context.Students.FirstOrDefault(s => s.Id == id);
if
(student == null) return NotFound(); _context.Students.Remove(student);
_context.SaveChanges(); return RedirectToAction("Index"); }
✅ Step 2: Delete Confirmation View তৈরি করুন
📄 Views/Student/Delete.cshtml
@model
MvcBanglaApp.Models.Student <h2>আপনি কি নিশ্চিতভাবে ডিলিট করতে চান?</h2> <p><strong>নাম:</strong> @Model.Name</p> <p><strong>বিভাগ:</strong> @Model.Department</p> <form asp-action="Delete" method="post"> <input type="hidden" asp-for="Id" /> <button type="submit">হ্যাঁ, ডিলিট করুন</button> <a asp-action="Index">না, ফিরে যান</a> </form>
✅ Step 3: Index Page-এ Delete লিংক যোগ করুন
📄 Views/Student/Index.cshtml
<td> <a asp-action="Edit" asp-route-id="@s.Id">Edit</a> | <a asp-action="Delete"
asp-route-id="@s.Id" style="color:red">Delete</a> </td>
🚀 এখন ব্রাউজারে পরীক্ষা
করুন
1. যান: https://localhost:xxxx/Student/Index
2. যে ছাত্রকে ডিলিট করতে চান, তার পাশে Delete ক্লিক করুন
3. কনফার্মেশন পেজ আসবে → হ্যাঁ, ডিলিট করুন চাপুন
4. ছাত্র ডাটাবেজ থেকে ডিলিট হয়ে যাবে
✅ আপনি
এখন শিখলেন:
✔ ডেটা ডিলিট করার GET ও POST মেথড
✔
Confirmation View ব্যবহার
✔
ডিলিট করার পর redirect করে তালিকায় যাওয়া
এখন আমরা শিখবো — ASP.NET Core MVC তে Details View তৈরি করে একজন ছাত্রের সম্পূর্ণ তথ্য কীভাবে দেখানো যায়। এটি অনেক সময় লাগে যখন ইউজার একটি নির্দিষ্ট রেকর্ড সম্পর্কে বিস্তারিত জানতে চায়।
🎯 টপিক: Details View (ছাত্রের
সম্পূর্ণ তথ্য)
✅ Step 1: Controller-এ Details Method যোগ করুন
📄 Controllers/StudentController.cs
[HttpGet] public IActionResult Details(int id) { var student =
_context.Students.FirstOrDefault(s => s.Id == id); if (student == null) return NotFound(); return View(student); }
✅ Step 2: View তৈরি করুন
📄 Views/Student/Details.cshtml
@model
MvcBanglaApp.Models.Student <h2>ছাত্রের বিস্তারিত তথ্য</h2> <table border="1" cellpadding="10"> <tr> <th>আইডি</th> <td>@Model.Id</td> </tr> <tr> <th>নাম</th> <td>@Model.Name</td> </tr> <tr> <th>বিভাগ</th> <td>@Model.Department</td> </tr> </table> <br /> <a asp-action="Index">↩️ তালিকায়
ফিরে যান</a>
✅ Step 3: Index Page-এ Details লিংক যোগ করুন
📄 Views/Student/Index.cshtml
<td> <a asp-action="Details"
asp-route-id="@s.Id">Details</a> | <a asp-action="Edit" asp-route-id="@s.Id">Edit</a> | <a asp-action="Delete" asp-route-id="@s.Id" style="color:red">Delete</a> </td>
🚀 এখন ব্রাউজারে পরীক্ষা
করুন
1. যান: https://localhost:xxxx/Student/Index
2. যেকোনো ছাত্রের পাশে Details ক্লিক করুন
3. আপনি ঐ ছাত্রের সম্পূর্ণ তথ্য (ID, নাম, বিভাগ) দেখতে পাবেন
✅ আপনি
এখন শিখলেন:
✔ কিভাবে একজন নির্দিষ্ট ছাত্রের ID দিয়ে তথ্য আনা যায়
✔
View-এ ডেটা দেখানোর জন্য @Model ব্যবহার
✔
Details link থেকে Controller → View ডেটা পাঠানো
এখন আমরা শিখবো — ASP.NET Core MVC তে ছাত্র তালিকায় Search / Filter ফিচার যুক্ত করা। অর্থাৎ ইউজার একটি নাম লিখে সেই নাম অনুযায়ী ছাত্রদের খুঁজে বের করতে পারবে।
🎯 টপিক: Search/Filter — ছাত্র
তালিকায় নাম দিয়ে খোঁজ
✅ Step 1: Controller-এ Index Method পরিবর্তন করে search প্যারামিটার যোগ করা
📄 Controllers/StudentController.cs
public IActionResult Index(string searchString) { var students = from s in _context.Students select s; if (!string.IsNullOrEmpty(searchString)) { students = students.Where(s
=> s.Name.Contains(searchString)); } return View(students.ToList()); }
✅ Step 2: View (Index.cshtml) ফাইল আপডেট
করে Search Form যোগ করা
📄 Views/Student/Index.cshtml
@model List<MvcBanglaApp.Models.Student>
<h2>ছাত্র
তালিকা</h2> <form asp-action="Index" method="get"> <input type="text" name="searchString" value="@Request.Query["searchString"]"
placeholder="নামের মাধ্যমে খুঁজুন" /> <button type="submit">🔍
খুঁজুন</button> </form> <br /> <table border="1" cellpadding="5" cellspacing="0"> <thead> <tr> <th>আইডি</th> <th>নাম</th> <th>বিভাগ</th> <th>অ্যাকশন</th> </tr> </thead> <tbody> @foreach (var s in Model) { <tr> <td>@s.Id</td> <td>@s.Name</td> <td>@s.Department</td> <td> <a asp-action="Details"
asp-route-id="@s.Id">Details</a> | <a asp-action="Edit" asp-route-id="@s.Id">Edit</a> | <a asp-action="Delete" asp-route-id="@s.Id" style="color:red">Delete</a> </td> </tr> } </tbody> </table>
🚀 এখন ব্রাউজারে যাচাই
করুন
1. যান: https://localhost:xxxx/Student/Index
2. উপরের search বক্সে যেমন রাহিম লিখে খুঁজুন চাপুন
3. তালিকায় শুধু "রাহিম" নামের ছাত্র দেখাবে
✅ আপনি
এখন শিখলেন:
✔ কিভাবে ইউজার ইনপুট দিয়ে ডেটা Filter করা যায়
✔
কিভাবে Controller-এ QueryString (searchString) নেওয়া যায়
✔
কিভাবে Razor View-তে Request.Query[] দিয়ে বক্সে আগের লেখা ধরে রাখা যায়
এখন আমরা শিখবো — ASP.NET Core MVC তে Login / Authentication System তৈরির সহজতম পদ্ধতি। এই সিস্টেম ইউজারকে লগইন করতে, সেশন ম্যানেজ করতে এবং লগআউট করতে সহায়তা করে।
🎯 টপিক: Login / Authentication System (Without Identity Framework)
আমরা এখানে নিজে হাতে একটি সাধারণ Login System বানাবো, যেখানে:
·
ইউজার ইউজারনেম ও পাসওয়ার্ড দিয়ে লগইন করবে
·
সঠিক তথ্য হলে সেশন তৈরি হবে
·
ভুল হলে error message দেখাবে
·
লগইন ছাড়া প্রোটেক্টেড পেজে ঢোকা যাবে না
✅ Step 1: একটি Simple User Model তৈরি
করুন
📄 Models/User.cs
namespace MvcBanglaApp.Models { public class User { public string Username { get; set; } public string Password { get; set; } } }
✅ Step 2: Login Controller তৈরি করুন
📄 Controllers/AuthController.cs
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using MvcBanglaApp.Models; namespace MvcBanglaApp.Controllers { public class AuthController : Controller { // Login ফর্ম
দেখানোর জন্য [HttpGet] public IActionResult Login() { return View(); } // Login
সাবমিট (POST) [HttpPost] public IActionResult Login(User user) { // সঠিক ইউজার চেক (এখানে ডেমো ইউজার — আসলে DB থেকে আনবেন) if (user.Username == "admin"
&& user.Password == "1234") { HttpContext.Session.SetString("Username",
user.Username); return RedirectToAction("Welcome", "Auth"); } ViewBag.Error = "ইউজারনেম
বা পাসওয়ার্ড ভুল হয়েছে"; return View(); } public IActionResult Welcome() { if (string.IsNullOrEmpty(HttpContext.Session.GetString("Username")))
return
RedirectToAction("Login"); ViewBag.Username = HttpContext.Session.GetString("Username");
return
View(); } public IActionResult Logout() { HttpContext.Session.Clear(); return RedirectToAction("Login");
} } }
✅ Step 3: Session সাপোর্ট চালু করুন
📄 Program.cs-এ নিচের
লাইনগুলো যোগ করুন
builder.Services.AddSession();
var
app = builder.Build(); app.UseSession();
✅ Step 4: Login ফর্ম View তৈরি করুন
📄 Views/Auth/Login.cshtml
@model
MvcBanglaApp.Models.User <h2>Login করুন</h2> <form asp-action="Login" method="post"> <label>Username:</label><br /> <input asp-for="Username" /><br /><br /> <label>Password:</label><br /> <input asp-for="Password" type="password" /><br /><br /> <button type="submit">Login</button> </form> @if(ViewBag.Error != null) { <p style="color:red">@ViewBag.Error</p> }
✅ Step 5: Welcome Page View তৈরি করুন
📄 Views/Auth/Welcome.cshtml
<h2>Welcome,
@ViewBag.Username!</h2> <p>আপনি সফলভাবে লগইন করেছেন।</p> <a asp-action="Logout">Logout</a>
🚀 এখন ব্রাউজারে পরীক্ষা
করুন
1. যান: https://localhost:xxxx/Auth/Login
2. ইউজারনেম: admin | পাসওয়ার্ড: 1234 দিন
3. সফল হলে Welcome পেজে নিয়ে যাবে
4. লগআউট করলে আবার লগইন করতে হবে
✅ আপনি
এখন শিখলেন:
✔ কিভাবে Login ফর্ম তৈরি করতে হয়
✔
কিভাবে Session ব্যবহার করে ইউজার সংরক্ষণ করতে হয়
✔
কিভাবে Unauthorized access আটকাতে হয়
✔
কিভাবে Logout কাজ করে
🔒 Extra: Controller-level protection
(Optional)
public IActionResult Welcome() { if (string.IsNullOrEmpty(HttpContext.Session.GetString("Username")))
return
RedirectToAction("Login"); // Continue... }
এখন আমরা শিখবো — ASP.NET Core MVC তে ডেটাবেজ ব্যবহার করে Login System, অর্থাৎ ইউজারের তথ্য আমরা ডেটাবেজ থেকে চেক করবো, Session তৈরি করবো, এবং ইউজারকে Welcome পেজে পাঠাবো।
🎯 টপিক: Database দিয়ে
Login System
✅ Step Overview:
1. User Model তৈরি
2. AppDbContext এ User Table যুক্ত করা
3. Sample ইউজার ডেটা Insert
4. Login Controller তৈরি
5. Login View ও Welcome View তৈরি
6. Session দিয়ে Authentication পরিচালনা
✅ Step 1: User Model তৈরি
📄 Models/User.cs
using System.ComponentModel.DataAnnotations; namespace MvcBanglaApp.Models
{ public
class
User
{ public
int
Id { get;
set;
} [Required]
public
string
Username { get; set; } [Required] public string Password { get; set; } } }
✅ Step 2: DbContext-এ User Table যুক্ত
করুন
📄 Models/AppDbContext.cs
public DbSet<User> Users { get; set; }
✅ Step 3: Database Migration ও ইউজার Insert
🔧 Package Manager Console এ রান করুন:
Add-Migration
AddUserTable Update-Database
তারপর AppDbContext এর ভিতরে
Seed Data দিতে পারেন
(অপশনালভাবে):
protected override void OnModelCreating(ModelBuilder modelBuilder) {
modelBuilder.Entity<User>().HasData( new User { Id = 1, Username = "admin", Password = "1234" } ); }
এরপর আবার রান করুন:
Add-Migration SeedUser
Update-Database
✅ Step 4: Controller তৈরি করুন
📄 Controllers/AuthController.cs
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Http; using MvcBanglaApp.Models; using System.Linq; namespace MvcBanglaApp.Controllers { public class AuthController : Controller { private readonly AppDbContext _context; public AuthController(AppDbContext context) { _context = context; } [HttpGet] public IActionResult Login() { return View(); } [HttpPost] public IActionResult Login(User user) { var existingUser =
_context.Users .FirstOrDefault(u => u.Username == user.Username &&
u.Password == user.Password); if (existingUser != null) { HttpContext.Session.SetString("Username",
existingUser.Username); return RedirectToAction("Welcome"); } ViewBag.Error = "ইউজারনেম
বা পাসওয়ার্ড ভুল হয়েছে"; return View(); } public IActionResult Welcome() { if (string.IsNullOrEmpty(HttpContext.Session.GetString("Username")))
return
RedirectToAction("Login"); ViewBag.Username = HttpContext.Session.GetString("Username");
return
View(); } public IActionResult Logout() { HttpContext.Session.Clear(); return RedirectToAction("Login");
} } }
✅ Step 5: Login View তৈরি করুন
📄 Views/Auth/Login.cshtml
@model
MvcBanglaApp.Models.User <h2>লগইন করুন</h2> <form asp-action="Login" method="post"> <label>Username:</label><br /> <input asp-for="Username" /><br /><br /> <label>Password:</label><br /> <input asp-for="Password" type="password" /><br /><br /> <button type="submit">Login</button> </form> @if(ViewBag.Error != null) { <p style="color:red">@ViewBag.Error</p> }
✅ Step 6: Welcome View তৈরি করুন
📄 Views/Auth/Welcome.cshtml
<h2>Welcome, @ViewBag.Username!</h2> <p>আপনি
সফলভাবে লগইন করেছেন।</p> <a asp-action="Logout">Logout</a>
✅ Step 7: Session সাপোর্ট চালু করুন
📄 Program.cs এ যুক্ত
করুন:
builder.Services.AddSession();
var
app = builder.Build(); app.UseSession();
🚀 এখন ব্রাউজারে টেস্ট
করুন
1. URL যান: https://localhost:xxxx/Auth/Login
2. ইউজারনেম: admin ও পাসওয়ার্ড: 1234
3. সফল লগইন হলে Welcome পেজ দেখাবে
4. Logout করলে আবার Login পেজে পাঠাবে
✅ আপনি
এখন শিখলেন:
✔ ডেটাবেজ ব্যবহার করে ইউজার লগইন চেক করা
✔
Session দিয়ে লগইন কন্ট্রোল
✔
ভুল ইউজার হলে Error দেখানো
✔
Logout সিস্টেম তৈরি
🔐 বোনাস পরামর্শ:
·
পাসওয়ার্ড এনক্রিপশন (SHA256, bcrypt) ব্যবহার করুন
·
Role-based access
control যোগ করতে পারেন
·
Registration system যুক্ত করে ইউজার তৈরি করতে দিন
এখন আমরা শিখবো — ASP.NET Core MVC তে একটি User Registration System তৈরি করা, যাতে ইউজার নিজের নাম, ইউজারনেম এবং পাসওয়ার্ড দিয়ে অ্যাকাউন্ট তৈরি করতে পারে, এবং সেই ডেটা ডাটাবেজে সংরক্ষিত হয়।
🎯 টপিক: User Registration System (with Database)
✅ Step Overview:
1. User Model এ Validation Attribute যোগ
2. Registration Controller Action তৈরি
3. Registration View তৈরি
4. ডেটা ডাটাবেজে Insert করা
5. Success / Login Page-এ Redirect
✅ Step 1: User Model (with validation)
📄 Models/User.cs
using System.ComponentModel.DataAnnotations; namespace MvcBanglaApp.Models
{ public
class
User
{ public
int
Id { get;
set;
} [Required(ErrorMessage = "Username অবশ্যই দিতে হবে")] public string Username { get; set; } [Required(ErrorMessage = "Password
অবশ্যই দিতে হবে")] [DataType(DataType.Password)]
public
string
Password { get; set; } } }
✅ Step 2: Controller-এ Registration Action যুক্ত
করুন
📄 Controllers/AuthController.cs
[HttpGet] public IActionResult Register() { return View(); } [HttpPost] public IActionResult Register(User user) { if (ModelState.IsValid)
{ // Check if username already exists var existingUser = _context.Users.FirstOrDefault(u => u.Username
== user.Username); if (existingUser != null) { ModelState.AddModelError("Username", "এই
ইউজারনেম আগে থেকেই আছে"); return View(user); }
_context.Users.Add(user); _context.SaveChanges(); TempData["SuccessMessage"]
= "রেজিস্ট্রেশন সফল
হয়েছে! এখন লগইন করুন।"; return RedirectToAction("Login");
} return
View(user); }
✅ Step 3: Registration View তৈরি করুন
📄 Views/Auth/Register.cshtml
@model
MvcBanglaApp.Models.User <h2>রেজিস্ট্রেশন করুন</h2> <form asp-action="Register" method="post"> <label>Username:</label><br /> <input asp-for="Username" /><br /> <span style="color:red" asp-validation-for="Username"></span><br /><br /> <label>Password:</label><br /> <input asp-for="Password" type="password" /><br /> <span style="color:red" asp-validation-for="Password"></span><br /><br /> <button type="submit">Register</button> </form> <a asp-action="Login">আগেই একাউন্ট করেছেন? Login করুন</a> @section Scripts { @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
✅ Step 4: Login View-এ Success Message দেখান
📄 Views/Auth/Login.cshtml (আপডেট
করুন)
@if
(TempData["SuccessMessage"] != null) { <p style="color:green">@TempData["SuccessMessage"]</p> }
✅ Step 5: Navigation যুক্ত করুন (যদি প্রয়োজন হয়)
যেকোনো Layout বা Login Page থেকে Registration পেজে যাওয়ার লিংক দিন:
<a asp-controller="Auth" asp-action="Register">Register</a>
🚀 এখন ব্রাউজারে পরীক্ষা
করুন
1. যান: https://localhost:xxxx/Auth/Register
2. একটি নতুন ইউজারনেম ও পাসওয়ার্ড দিন
3. সফল হলে Login পেজে পাঠাবে
4. Login করে Welcome পেজে প্রবেশ করুন
✅ আপনি
এখন শিখলেন:
✔ ইউজার রেজিস্ট্রেশন
ফর্ম তৈরি
✔
ফর্ম validation ও error message
✔
Username duplication চেক
✔
রেজিস্টার করার পর redirect এবং success message
এখন আমরা শিখবো:
🎯 টপিক: Password Hashing in ASP.NET Core (SHA256 বা Bcrypt)
🔐 কেন Password Hashing দরকার?
·
ডেটাবেজে পাসওয়ার্ড প্লেইন টেক্সটে রাখলে হ্যাক হলে বিপদ
·
Hashing করলে পাসওয়ার্ড হয়ে যায় unreadable — তাই নিরাপদ
·
Best practice: পাসওয়ার্ড Hash করে Save করা এবং Login-এর সময় Compare করে Validate করা
✅ আমরা
এখানে করবো:
1. SHA256 দিয়ে
পাসওয়ার্ড Hash করা
2. Register-এ Hash Save করা
3. Login-এ Hash Check করা
✅ Step 1: Utility Function তৈরি করুন
📄 Helpers/PasswordHelper.cs
using System.Security.Cryptography; using System.Text; namespace MvcBanglaApp.Helpers
{ public
static
class
PasswordHelper { public static string ComputeSha256Hash(string rawData) { using (SHA256 sha256Hash = SHA256.Create()) { byte[] bytes =
sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); StringBuilder builder
= new
StringBuilder(); foreach (byte b in bytes) { builder.Append(b.ToString("x2")); // hexadecimal
} return
builder.ToString(); } } } }
✅ Step 2: Register Controller-এ Hash করে Save করুন
📄 AuthController.cs → Register Action:
using MvcBanglaApp.Helpers; [HttpPost] public IActionResult Register(User user) { if (ModelState.IsValid) { var existingUser = _context.Users.FirstOrDefault(u => u.Username
== user.Username); if (existingUser != null) { ModelState.AddModelError("Username", "এই
ইউজারনেম আগে থেকেই আছে"); return View(user); } // Password Hash করুন user.Password =
PasswordHelper.ComputeSha256Hash(user.Password); _context.Users.Add(user); _context.SaveChanges();
TempData["SuccessMessage"] = "রেজিস্ট্রেশন সফল হয়েছে! এখন লগইন করুন।"; return RedirectToAction("Login");
} return
View(user); }
✅ Step 3: Login Controller-এ Hash মেলান
📄 AuthController.cs → Login Action:
[HttpPost] public IActionResult Login(User user) { // ইউজারের পাসওয়ার্ডকে hash করুন string hashedPassword =
PasswordHelper.ComputeSha256Hash(user.Password); var existingUser =
_context.Users .FirstOrDefault(u => u.Username == user.Username &&
u.Password == hashedPassword); if (existingUser != null) { HttpContext.Session.SetString("Username",
existingUser.Username); return RedirectToAction("Welcome"); } ViewBag.Error = "ইউজারনেম
বা পাসওয়ার্ড ভুল হয়েছে"; return View(); }
✅ এখন পরীক্ষা করুন
1. Register পেজে গিয়ে একটি নতুন ইউজার রেজিস্টার করুন
2. SQL Server Explorer → Users টেবিল খুলে দেখুন — পাসওয়ার্ড hashed!
3. Login করুন — hashed password মিলিয়ে যাচাই হবে
🛡️ SHA256 vs BCrypt — কোনটা ভালো?
বিষয় |
SHA256 |
BCrypt |
নিরাপত্তা |
মাঝারি |
খুব
ভালো |
স্পিড |
খুব
দ্রুত (less secure) |
ধীরে
(more secure) |
Salting |
আলাদা করতে
হয় |
Built-in |
ASP.NET Core Identity |
BCrypt ব্যবহার করে |
✅ |
🔑 BCrypt
ব্যবহার করতে
হলে BCrypt.Net-Next NuGet package লাগবে।
চাইলে আমি সেটাও দেখাতে পারি।
✅ আপনি
এখন শিখলেন:
✔ কীভাবে SHA256 দিয়ে পাসওয়ার্ড Hash করতে হয়
✔
কীভাবে Registration-এর সময় Hash Save করা যায়
✔
কীভাবে Login-এর সময় hashed password মিলিয়ে যাচাই করতে হয়
✔
Security concern মাথায় রাখা
এখন আমরা শিখবো — BCrypt দিয়ে Password Hashing, যা SHA256 থেকে অনেক বেশি নিরাপদ, কারণ এটি স্লো, salt ব্যবহার করে, এবং brute-force থেকে সুরক্ষিত।
🎯 টপিক: BCrypt দিয়ে Password Hashing in ASP.NET Core
✅ Step Overview:
1. NuGet দিয়ে BCrypt লাইব্রেরি ইনস্টল
2. PasswordHelper.cs ক্লাসে BCrypt ফাংশন তৈরি
3. Registration-এ Hash করে Save করা
4. Login-এ Hash Verify করা
✅ Step 1: NuGet থেকে BCrypt.Net ইনস্টল
করুন
📦 টার্মিনালে টাইপ
করুন:
dotnet add package
BCrypt.Net-Next
অথবা Visual Studio থেকে:
Tools → NuGet Package
Manager → Manage NuGet Packages → Search: BCrypt.Net-Next → Install
✅ Step 2: PasswordHelper.cs ক্লাসে
ফাংশন যোগ করুন
📄 Helpers/PasswordHelper.cs
using BCrypt.Net; namespace MvcBanglaApp.Helpers { public static class PasswordHelper { // Hashing Password public static string HashPassword(string password) { return BCrypt.Net.BCrypt.HashPassword(password); } // Comparing Passwords
public
static
bool
VerifyPassword(string inputPassword, string hashedPassword) { return BCrypt.Net.BCrypt.Verify(inputPassword, hashedPassword); } } }
✅ Step 3: Register Controller-এ Hash করে Save করুন
📄 Controllers/AuthController.cs
[HttpPost] public IActionResult Register(User user) { if (ModelState.IsValid)
{ var
existingUser = _context.Users.FirstOrDefault(u => u.Username ==
user.Username); if (existingUser != null) { ModelState.AddModelError("Username", "এই
ইউজারনেম আগে থেকেই আছে"); return View(user); } // 🔐 Hash password using BCrypt user.Password = PasswordHelper.HashPassword(user.Password);
_context.Users.Add(user); _context.SaveChanges(); TempData["SuccessMessage"]
= "রেজিস্ট্রেশন সফল
হয়েছে! এখন লগইন করুন।"; return RedirectToAction("Login");
} return
View(user); }
✅ Step 4: Login Controller-এ Password Verify করুন
[HttpPost] public IActionResult Login(User user) { var existingUser =
_context.Users.FirstOrDefault(u => u.Username == user.Username); if (existingUser != null) { // 🔐 Verify password using BCrypt bool isPasswordValid = PasswordHelper.VerifyPassword(user.Password,
existingUser.Password); if (isPasswordValid) { HttpContext.Session.SetString("Username",
existingUser.Username); return RedirectToAction("Welcome"); } } ViewBag.Error = "ইউজারনেম
বা পাসওয়ার্ড ভুল হয়েছে"; return View(); }
✅ এখন আপনি যা পাবেন:
·
রেজিস্ট্রেশনের সময় পাসওয়ার্ড BCrypt দিয়ে hash হবে
·
Login এর সময় input password → hashed password এর সাথে মিলানো হবে
·
ডাটাবেজে পাসওয়ার্ড এমন দেখতে হবে:
·
$2a$11$q3z/2bKCF1pmcJYxsFfJyeXjX.....
✅ আপনি
এখন শিখলেন:
✔ কীভাবে ASP.NET Core এ BCrypt ব্যবহার করতে হয়
✔
কীভাবে রেজিস্ট্রেশনের
সময় পাসওয়ার্ড হ্যাশ করা যায়
✔
কীভাবে লগইনের সময় পাসওয়ার্ড যাচাই করা যায়
✔
SHA256 থেকে নিরাপদ, Salt সহ, Built-in protection
🔒 BCrypt vs SHA256:
ফিচার |
SHA256 |
BCrypt |
Speed |
দ্রুত |
ধীরে
(Good!) |
Salt |
Manual |
Built-in |
Brute-force Protection |
না |
হ্যাঁ ✅ |
ASP.NET Identity Uses? |
❌ |
✅ |
এখন আমরা শিখবো —
👉 ASP.NET Core MVC তে Role-based Login
System যেখানে ইউজারের role (Admin/User) অনুযায়ী আলাদা page, permission, বা feature দেখা যাবে।
🎯 টপিক: Role-based Login System (Without Identity Framework)
✅ Step Overview:
1. User মডেলে Role ফিল্ড যোগ করা
2. Registration ফর্মে Role সিলেকশন (Dropdown)
3. Login এর পর Session-এ Role রাখা
4. Role অনুযায়ী আলাদা Page দেখানো
5. Controller বা View-এ Role check করা
✅ Step 1: User Model-এ Role ফিল্ড যুক্ত
করুন
📄 Models/User.cs
public class User { public int Id { get; set; } [Required] public string Username { get; set; } [Required] public string Password { get; set; } [Required] public string Role { get; set; } // ✅ New: Admin / User }
🎯
Values: Admin বা User
✅ Step 2: Register View-এ Role Dropdown যুক্ত
করুন
📄 Views/Auth/Register.cshtml
<form asp-action="Register"
method="post"> <!-- Username and Password --> <label>Role নির্বাচন করুন:</label><br /> <select asp-for="Role"> <option value="User">User</option> <option value="Admin">Admin</option> </select><br /> <span asp-validation-for="Role" style="color:red"></span><br /><br /> <button type="submit">Register</button> </form>
✅ Step 3: Register Controller-এ Role Save করুন
📄 Controllers/AuthController.cs → Register()
[HttpPost] public IActionResult Register(User user) { if (ModelState.IsValid)
{ var
existing = _context.Users.FirstOrDefault(u => u.Username == user.Username); if (existing != null) {
ModelState.AddModelError("Username", "এই
ইউজারনেম আগে থেকেই আছে"); return View(user); }
user.Password = PasswordHelper.HashPassword(user.Password);
_context.Users.Add(user); _context.SaveChanges(); TempData["SuccessMessage"]
= "রেজিস্ট্রেশন সফল
হয়েছে!"; return RedirectToAction("Login");
} return
View(user); }
✅ Step 4: Login-এর সময় Role Session-এ রাখুন
📄 AuthController.cs → Login()
[HttpPost] public IActionResult Login(User user) { var existingUser =
_context.Users.FirstOrDefault(u => u.Username == user.Username); if (existingUser != null) { bool isPasswordValid =
PasswordHelper.VerifyPassword(user.Password, existingUser.Password); if (isPasswordValid) {
HttpContext.Session.SetString("Username", existingUser.Username); HttpContext.Session.SetString("Role",
existingUser.Role); // ✅ Store Role return RedirectToAction("Welcome"); } } ViewBag.Error = "ইউজারনেম
বা পাসওয়ার্ড ভুল হয়েছে"; return View(); }
✅ Step 5: Welcome Page-এ Role অনুযায়ী আলাদা
View দেখান
📄 Views/Auth/Welcome.cshtml
@{ var username =
ViewBag.Username; var role = Context.Session.GetString("Role"); }
<h2>Welcome,
@username!</h2> <p>আপনার Role: <strong>@role</strong></p> @if (role == "Admin") { <p style="color:green">আপনি
একজন অ্যাডমিন। আপনি সকল ফিচার অ্যাক্সেস করতে পারবেন।</p> } else if (role == "User") { <p style="color:blue">আপনি
একজন সাধারণ ইউজার। সীমিত ফিচার আছে আপনার জন্য।</p> } <a asp-action="Logout">Logout</a>
✅ Step 6: Controller-এ Role-Based Authorization (ম্যানুয়ালি)
public IActionResult AdminOnlyPage() { if (HttpContext.Session.GetString("Role") != "Admin")
{ return
RedirectToAction("AccessDenied"); } return View(); }
✅ Optional: Access Denied Page
public IActionResult AccessDenied() { return Content("⛔️ আপনি
এই পেইজ দেখতে অনুমতি পাননি।"); }
✅ আপনি
এখন শিখলেন:
✔ ইউজারের Role ডাটাবেজে Save করা
✔
Login-এর সময় Session-এ Role রাখা
✔
View বা Controller-এ Role Check করা
✔
Admin vs User আলাদা Privilege দেখানো
🔒 বোনাস আইডিয়া:
ইউজার |
দেখতে পাবে |
Admin |
সমস্ত ছাত্র তালিকা, ডিলিট/এডিট |
User |
শুধু
তালিকা ও
Details |
🎯 টপিক: Role-Based Login with ASP.NET Core Identity
✅ কী শিখবেন :
·
Identity Setup
(Built-in Register/Login System)
·
User + Role Table ব্যবহার
·
Admin/User Role যুক্ত করা
·
Role অনুযায়ী ভিন্ন Access/Page
·
[Authorize(Roles
= "Admin")] দিয়ে নিরাপত্তা
🛠️ Step-by-Step Guide
✅ Step 1: নতুন ASP.NET Core MVC Project তৈরি
করুন (with Identity)
👉 Visual
Studio এ:
·
Create New Project →
ASP.NET Core Web App (Model-View-Controller)
·
Enable Authentication → Select Individual Accounts
✅ এটি অটো:
·
IdentityUser model ব্যবহার করে
·
Register, Login,
Logout View তৈরি করে
·
Database Migration দেয়
Solution Explorer > Right Click Project > Add > New Scaffolded Item > Identity
- Select Files:
Register
,Login
,Logout
,ForgotPassword
,ResetPassword
✅ Step 2: Project রান করুন
dotnet run
👉 URL: https://localhost:xxxx/Identity/Account/Register
·
ইউজার তৈরি করুন
·
SQL Server Explorer এ দেখবেন:
AspNetUsers, AspNetRoles, AspNetUserRoles টেবিল আছে
✅ Step 3: প্রথমে Admin Role তৈরি
করুন (Seed)
📄 Data/DbInitializer.cs ফাইল
বানান:
using Microsoft.AspNetCore.Identity; using System.Threading.Tasks;
public
static
class
DbInitializer { public static async Task SeedRolesAsync(RoleManager<IdentityRole> roleManager) { if (!await
roleManager.RoleExistsAsync("Admin")) await roleManager.CreateAsync(new IdentityRole("Admin")); if (!await roleManager.RoleExistsAsync("User")) await roleManager.CreateAsync(new IdentityRole("User")); } public static async Task SeedAdminUserAsync(UserManager<IdentityUser> userManager) { var adminUser = await
userManager.FindByEmailAsync("admin@example.com"); if (adminUser == null) { var user = new IdentityUser { UserName = "admin@example.com", Email = "admin@example.com", EmailConfirmed = true }; var result = await userManager.CreateAsync(user, "Admin@123");
if
(result.Succeeded) { await userManager.AddToRoleAsync(user, "Admin");
} } } }
✅ Step 4: Program.cs-এ Call করুন
📄 Program.cs (বা Startup.cs)
using Microsoft.AspNetCore.Identity; var app =
builder.Build(); // Call Seeder using (var scope = app.Services.CreateScope()) { var services =
scope.ServiceProvider; var roleManager =
services.GetRequiredService<RoleManager<IdentityRole>>(); var userManager =
services.GetRequiredService<UserManager<IdentityUser>>(); await
DbInitializer.SeedRolesAsync(roleManager); await DbInitializer.SeedAdminUserAsync(userManager); }
✅ Step 5: Controller-এ Role-based Access দিন
📄 AdminController.cs
using Microsoft.AspNetCore.Authorization; [Authorize(Roles = "Admin")] public class AdminController : Controller { public IActionResult Dashboard() { return View(); } }
✅ Step 6: View-এ Role অনুযায়ী UI দেখান
📄 _Layout.cshtml
@using
Microsoft.AspNetCore.Identity @inject SignInManager<IdentityUser>
SignInManager @inject UserManager<IdentityUser> UserManager @if (SignInManager.IsSignedIn(User)) { <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li> @if
(User.IsInRole("Admin")) { <li><a asp-controller="Admin" asp-action="Dashboard">Admin Panel</a></li> } <li><form asp-controller="Account" asp-action="Logout" method="post"><button type="submit">Logout</button></form></li> } else { <li><a asp-area="Identity" asp-page="/Account/Login">Login</a></li> }
✅ ফলাফল
কী?
·
Admin লগইন করলে Admin Dashboard দেখতে পাবে
·
সাধারণ ইউজার দেখবে না
·
Unauthorized user
redirect হয়ে Login পেজে যাবে
✅ আপনি
এখন শিখলেন:
✔ ASP.NET Identity দিয়ে Login/Register
✔
RoleSeeder দিয়ে Admin/User তৈরি
✔
Role-based [Authorize] Attribute
✔
Layout-এ Role Check
✔
Security best practice
🔐 Bonus:
Features |
Identity Support |
Email Confirm |
✅ |
Password Reset |
✅ |
Lockout & 2FA |
✅ |
External Login (Google/Facebook) |
✅ |
🎯 টপিক: Google / Facebook External Login (ASP.NET Core Identity সহ)
✅ প্রয়োজনীয় শর্ত:
·
ASP.NET Core MVC App
with Identity Enabled
·
SSL/HTTPS enabled
(Google/Facebook সেটিংসের জন্য)
🔐 আমরা কী শিখবো?
1. Google & Facebook App বানানো
2. Client ID ও Secret তৈরি
3. ASP.NET Core Project-এ External Login যুক্ত
4. Login Page-এ Google/Facebook Login
বাটন
5. Login সফল হলে ASP.NET Identity-র মাধ্যমে ইউজার Create
✅ Step 1: Google App তৈরি করুন
🔗 Google Developers Console:
👉 https://console.developers.google.com/
➤ নতুন প্রজেক্ট > OAuth consent screen > Credentials
> Create:
·
OAuth
Client ID
·
Application
Type: Web
Application
·
Add Authorized
Redirect URI:
·
https://localhost:xxxx/signin-google
✅ Copy করুন:
·
Client
ID
·
Client
Secret
✅ Step 2: Facebook App তৈরি করুন
👉 https://developers.facebook.com/apps/
1. Create App → "Consumer"
2. Add Product → Facebook Login → Settings
3. Site URL: https://localhost:xxxx/
Redirect URI:
https://localhost:xxxx/signin-facebook
✅ Copy করুন:
·
App ID = Client ID
·
App Secret = Client
Secret
✅ Step 3: আপনার Project-এ NuGet Package (যদি না থাকে)
dotnet add package
Microsoft.AspNetCore.Authentication.Google dotnet add package Microsoft.AspNetCore.Authentication.Facebook
✅ Step 4: Program.cs এ Authentication Configure করুন
📄 Program.cs
builder.Services.AddAuthentication()
.AddGoogle(options => { options.ClientId = "YOUR_GOOGLE_CLIENT_ID"; options.ClientSecret = "YOUR_GOOGLE_CLIENT_SECRET"; }) .AddFacebook(options => { options.AppId = "YOUR_FB_APP_ID";
options.AppSecret = "YOUR_FB_APP_SECRET"; });
❗ Ensure: .UseAuthentication(); and .UseAuthorization(); is in your middleware pipeline.
✅ Step 5: Login Page-এ External Login Button দেখান
📄 Views/Shared/_LoginPartial.cshtml অথবা ~/Areas/Identity/Pages/Account/Login.cshtml
<hr /> <div> <p>External
Logins:</p> <form asp-page="./ExternalLogin" asp-route-provider="Google" method="post"> <button type="submit" class="btn
btn-danger">Login with
Google</button> </form> <form asp-page="./ExternalLogin" asp-route-provider="Facebook" method="post"> <button type="submit" class="btn
btn-primary">Login with
Facebook</button> </form> </div>
✅ Step 6: চালু করে Test করুন
dotnet run
👉 https://localhost:xxxx/Identity/Account/Login
👉 “Login with Google” বা “Login with Facebook” বাটনে ক্লিক করুন
✅ যদি নতুন ইউজার হয়?
ASP.NET Identity:
·
ExternalLoginCallback() method
·
অটো ইউজার তৈরি করে (AspNetUsers টেবিলে)
·
আপনার UserManager ও SignInManager দিয়ে ইউজার সেশন চালায়
✅ আপনি
এখন শিখলেন:
✔ কিভাবে Google & Facebook OAuth লগইন যুক্ত করতে হয়
✔
ASP.NET Identity Framework এর সাথে External Login
integrate
✔
Client ID/Secret কিভাবে ব্যবহার করতে হয়
✔
Redirect URI কিভাবে কাজ করে
✔
OAuth Login success হলে ইউজার Create কিভাবে হয়
✅ Bonus:
Provider |
Redirect URI |
Google |
/signin-google |
Facebook |
/signin-facebook |
Microsoft |
/signin-microsoft (optional) |
GitHub |
/signin-github (with package) |
🎯 টপিক: Email Confirmation with ASP.NET Core Identity
✅ কী শিখবেন:
1. Email Confirmation চালু করা
2. Confirmation Token তৈরি
3. Confirmation Link ইমেইলে পাঠানো
4. ConfirmEmail অ্যাকশন তৈরি
5. Confirm না করলে Login ব্লক করা
🛠️ Step-by-Step Setup:
✅ Step 1: Identity Setup থাকতে হবে
Ensure:
·
আপনার প্রোজেক্টে ASP.NET Core
Identity সেটআপ করা আছে
·
/Identity/Account/Register রুট কাজ করছে
✅ Step 2: Email Configuration (Gmail SMTP
example)
📄 appsettings.json
"EmailSettings": { "SmtpServer": "smtp.gmail.com", "SmtpPort": 587, "SmtpUsername": "your_email@gmail.com", "SmtpPassword": "your_app_password" }
🔒 Gmail → App
Password ব্যবহার করুন (2-Step Verification
on থাকলে)
✅ Step 3: Email Sender Service তৈরি করুন
📄 Services/IEmailSender.cs
public interface IEmailSender { Task SendEmailAsync(string email, string subject, string message); }
📄 Services/EmailSender.cs
using System.Net; using System.Net.Mail; using Microsoft.Extensions.Configuration; public class EmailSender : IEmailSender { private readonly IConfiguration
_config; public EmailSender(IConfiguration config) { _config = config; } public async Task SendEmailAsync(string email, string subject, string message) { var smtpClient = new SmtpClient(_config["EmailSettings:SmtpServer"]) { Port = int.Parse(_config["EmailSettings:SmtpPort"]), Credentials = new NetworkCredential( _config["EmailSettings:SmtpUsername"], _config["EmailSettings:SmtpPassword"] ), EnableSsl = true }; var mailMessage = new MailMessage { From = new MailAddress(_config["EmailSettings:SmtpUsername"]), Subject = subject, Body = message, IsBodyHtml = true }; mailMessage.To.Add(email);
await
smtpClient.SendMailAsync(mailMessage); } }
📄 Program.cs-এ Register করুন
builder.Services.AddTransient<IEmailSender,
EmailSender>();
✅ Step 4: Register Action-এ Confirmation Link পাঠান
📄 Register.cshtml.cs (PageModel)
public class RegisterModel : PageModel { private readonly UserManager<IdentityUser> _userManager; private readonly IEmailSender
_emailSender; public RegisterModel(UserManager<IdentityUser> userManager, IEmailSender
emailSender) { _userManager = userManager; _emailSender = emailSender; } public async
Task<IActionResult> OnPostAsync() { if (ModelState.IsValid) { var user = new IdentityUser { UserName = Input.Email, Email = Input.Email }; var result = await
_userManager.CreateAsync(user, Input.Password); if (result.Succeeded) { var token = await
_userManager.GenerateEmailConfirmationTokenAsync(user); var confirmationLink =
Url.Page( "/Account/ConfirmEmail", pageHandler: null, values: new { userId = user.Id, code = token }, protocol: Request.Scheme); await _emailSender.SendEmailAsync(Input.Email,
"Confirm your email", $"অনুগ্রহ
করে আপনার একাউন্ট নিশ্চিত করুন: <a href='{confirmationLink}'>Confirm Email</a>"); return RedirectToPage("RegisterConfirmation"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty,
error.Description); } return Page(); } }
✅ Step 5: ConfirmEmail Page তৈরি করা
/Identity/Account/ConfirmEmail.cshtml.cs
public async Task<IActionResult> OnGetAsync(string userId, string code) { if (userId == null || code == null) return RedirectToPage("/Index"); var user = await _userManager.FindByIdAsync(userId); if (user == null) return NotFound("ইউজার পাওয়া যায়নি"); var result = await
_userManager.ConfirmEmailAsync(user, code); return Page(); }
✅ Step 6: Confirm না হলে Login ব্লক
করুন
Login.cshtml.cs → Login Action:
var user = await _userManager.FindByEmailAsync(Input.Email); if (user != null && !await
_userManager.IsEmailConfirmedAsync(user)) { ModelState.AddModelError(string.Empty, "আপনার ইমেইল এখনো কনফার্ম হয়নি।"); return Page(); }
✅ ফলাফল:
·
রেজিস্ট্রেশনের পর ইমেইলে confirmation লিংক যাবে
·
ইউজার কনফার্ম করলে AspNetUsers.EmailConfirmed
= true হবে
·
Confirm না করলে Login করতে পারবে না
✅ আপনি
এখন শিখলেন:
✔ SMTP দিয়ে ইমেইল কনফার্মেশন পাঠানো
✔
Confirmation Link তৈরী
✔
Token যাচাই ও EmailConfirmed আপডেট
✔
Login-এর আগে ইমেইল চেক করা
🔐 Security Note:
·
Token Expiry যুক্ত করতে পারেন
·
Logging/Tracking
system রাখা ভালো
🎯 টপিক: 2FA in ASP.NET Core Identity (Email/SMS)
✅ কী শিখবেন:
1. ASP.NET Identity-র Built-in 2FA System
2. Email Provider দিয়ে 2FA কোড পাঠানো
3. SMS Provider চাইলে সেটআপ করা (Twilio বা অন্য API)
4. User-initiated 2FA Enable / Disable
5. Login-এ 2FA Verification Flow
🛠️ আগে যা লাগবে:
·
ASP.NET Core MVC +
Identity Enabled
·
✅ EmailSender (পূর্বে করা আছে)
·
HTTPS চালু
✅ Step 1: EnableTwoFactorAuthentication View যুক্ত করুন
ASP.NET Identity এর /Manage/EnableAuthenticator এবং /Manage/TwoFactorAuthentication পেজগুলো ব্যবহার করতে পারবেন।
আপনি চাইলে ইউজার নিজে 2FA Enable/Disable করতে পারে:
👉 URL:
/Identity/Account/Manage/TwoFactorAuthentication
✅ Step 2: Email 2FA Provider সেট করুন
📄 Startup.cs বা Program.cs → EmailSender সেবা
Inject করা আছে ধরে নিচ্ছি:
builder.Services.AddTransient<IEmailSender,
EmailSender>();
✅ Step 3: User Login Flow-তে 2FA চেক
📄 /Areas/Identity/Pages/Account/Login.cshtml.cs
if (await _userManager.IsEmailConfirmedAsync(user)) { if (await
_userManager.GetTwoFactorEnabledAsync(user)) { var userId = await
_userManager.GetUserIdAsync(user); var code = await _userManager.GenerateTwoFactorTokenAsync(user, "Email");
// Send code via email await _emailSender.SendEmailAsync(user.Email, "2FA কোড", $"আপনার 2FA কোড: {code}"); return RedirectToPage("LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe }); } }
✅ Step 4: LoginWith2fa পেজ ব্যবহার
ASP.NET Identity-তে /LoginWith2fa পেজ থাকে (generated by scaffold)। আপনি চাইলে Modify করতে পারেন:
📄 /Areas/Identity/Pages/Account/LoginWith2fa.cshtml.cs
public async Task<IActionResult> OnPostAsync(bool rememberMe, string returnUrl = null) { returnUrl = returnUrl ?? Url.Content("~/"); if (!ModelState.IsValid)
{ return
Page(); } var result = await _signInManager.TwoFactorSignInAsync("Email",
Input.TwoFactorCode, rememberMe, rememberClient: false); if (result.Succeeded) { return
LocalRedirect(returnUrl); } else { ModelState.AddModelError(string.Empty, "ভুল
কোড"); return Page(); } }
✅ Step 5: SMS এর মাধ্যমে 2FA (যদি চান)
SMS পাঠাতে Twilio বা অন্য SMS API ব্যবহার করুন:
উদাহরণ Twilio:
public async Task SendSmsAsync(string number, string message) { var client = new TwilioRestClient("ACCOUNT_SID", "AUTH_TOKEN"); await MessageResource.CreateAsync( to: new PhoneNumber(number), from: new PhoneNumber("YOUR_TWILIO_NUMBER"), body: message); }
📌 তারপর ASP.NET Identity এ:
await _userManager.GenerateTwoFactorTokenAsync(user, "Phone");
✅ আপনার
Login Flow এখন:
1. ইউজার লগইন করে
2. Confirmed Email বা Phone থাকলে 2FA Token পাঠানো হয়
3. /LoginWith2fa পেজে ইউজার কোড দেয়
4. কনফার্ম হলে লগইন সফল
✅ আপনি
এখন শিখলেন:
✔ ASP.NET Identity দিয়ে 2FA চালু করা
✔
Email দিয়ে 2FA Token পাঠানো
✔
Login এর সময় 2FA Verification চেক
✔
SMS মাধ্যমে 2FA option তৈরি
✔
Built-in LoginWith2fa পেজ ব্যবহার
🔐 Security টিপস:
পরামর্শ |
ব্যাখ্যা |
2FA Code Expiry |
Code 5-10 মিনিটের জন্য valid রাখুন |
Remember Device |
Future Login এ 2FA না চাইলে checkbox দিন |
IP Logging |
প্রতিবার Login/IP সংরক্ষণ করুন |
🎯 টপিক: Password Reset via Email in ASP.NET Core Identity
✅ কী শিখবেন:
1. "Forgot Password" ফর্ম তৈরি
2. Token দিয়ে ইমেইল লিংক পাঠানো
3. "Reset Password" ফর্ম তৈরি
4. Token Verify করে নতুন পাসওয়ার্ড সেট
5. Confirmation Message দেখানো
🛠️ Step-by-Step Setup:
✅ Step 1: Identity Scaffold করে প্রয়োজনীয় পেজ যোগ করুন
Visual Studio →
Project > Add >
New Scaffolded Item → Identity →
✔ Select:
·
ForgotPassword
·
ResetPassword
Scaffold করলে ফাইল আসবে:
/Areas/Identity/Pages/Account/ForgotPassword.cshtml
/Areas/Identity/Pages/Account/ResetPassword.cshtml
✅ Step 2: Forgot Password View এ ইমেইল ইনপুট
দিন
📄 ForgotPassword.cshtml
<form method="post">
<div>
<label
asp-for="Input.Email"></label> <input asp-for="Input.Email"
/> <span asp-validation-for="Input.Email"></span> </div> <button type="submit">Send Reset Link</button> </form>
✅ Step 3: ForgotPassword.cshtml.cs – Token তৈরি ও ইমেইল
পাঠানো
public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) return Page(); var user = await _userManager.FindByEmailAsync(Input.Email); if (user == null || !(await _userManager.IsEmailConfirmedAsync(user)))
{ // ভিজিবল না,
কিন্তু নিরাপদ: ইউজার থাকুক বা না থাকুক, একই রেসপন্স return RedirectToPage("./ForgotPasswordConfirmation"); } var token = await _userManager.GeneratePasswordResetTokenAsync(user); var callbackUrl =
Url.Page( "/Account/ResetPassword", pageHandler: null, values: new { area = "Identity", code = token }, protocol: Request.Scheme); await
_emailSender.SendEmailAsync( Input.Email, "Reset
your password", $"পাসওয়ার্ড রিসেট করতে <a href='{callbackUrl}'>এখানে ক্লিক করুন</a>।"); return RedirectToPage("./ForgotPasswordConfirmation"); }
✅ Step 4: ResetPassword.cshtml – ফর্ম তৈরি
<form method="post">
<input
asp-for="Input.Code"
type="hidden"
/> <label>নতুন পাসওয়ার্ড:</label> <input asp-for="Input.Password" /> <span asp-validation-for="Input.Password"></span> <label>কনফার্ম পাসওয়ার্ড:</label> <input asp-for="Input.ConfirmPassword" /> <span asp-validation-for="Input.ConfirmPassword"></span> <button type="submit">Reset Password</button> </form>
✅ Step 5: ResetPassword.cshtml.cs – Token যাচাই ও পাসওয়ার্ড
রিসেট
public async Task<IActionResult> OnPostAsync() { if (!ModelState.IsValid) return Page(); var user = await _userManager.FindByEmailAsync(Input.Email); if (user == null) { return RedirectToPage("./ResetPasswordConfirmation"); } var result = await _userManager.ResetPasswordAsync(user, Input.Code,
Input.Password); if (result.Succeeded) { return RedirectToPage("./ResetPasswordConfirmation"); } foreach (var error in result.Errors) ModelState.AddModelError(string.Empty, error.Description);
return
Page(); }
✅ Step 6: ResetPasswordConfirmation Page
ASP.NET Identity ইতিমধ্যে ResetPasswordConfirmation.cshtml স্ক্যাফোল্ড
করে দেয়।
<h3>আপনার
পাসওয়ার্ড সফলভাবে রিসেট হয়েছে।</h3> <a asp-page="/Account/Login">লগইন করতে ক্লিক করুন</a>
✅ এখন কী হবে?
1. ইউজার Forgot Password পেজে ইমেইল দিবে
2. ইমেইলে একটি Reset Link যাবে
3. সে লিংকে গিয়ে নতুন পাসওয়ার্ড সেট করবে
4. পাসওয়ার্ড রিসেট হয়ে যাবে
✅ আপনি
এখন শিখলেন:
✔ ASP.NET Core Identity দিয়ে Password Reset System
✔
Token তৈরি করে নিরাপদভাবে ইমেইলে পাঠানো
✔
ইমেইল থেকে লিংকে ক্লিক করে নতুন পাসওয়ার্ড সেট
✔
Security-conscious Implementation (No user exposure)
🔐 টিপস:
বিষয় |
বিস্তারিত |
Token Validity |
24 ঘণ্টার বেশি
না
রাখা
নিরাপদ |
Use HTTPS |
Email লিংক অবশ্যই HTTPS এ পাঠানো উচিত |
Logging |
Reset activity লগ রাখা ভালো |
0 Comments