Header Ads Widget

Step-by-Step ASP.NET Core MVC শেখার পরিকল্পনা (বাংলায়)


🎯
টপিক : 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

  1. Solution Explorer-এ আপনার প্রজেক্টে Controllers ফোল্ডারটি খুঁজে বের করুন

  2. 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 হচ্ছে একধরনের ক্লাস, যেটা ডেটার স্ট্রাকচার (গঠন) নির্ধারণ করে। যেমনStudentProductEmployee ইত্যাদি।


🎯 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: RegisterLoginLogoutForgotPasswordResetPassword

✅ Step 2: Project রান করুন

dotnet run

👉 URL: https://localhost:xxxx/Identity/Account/Register

·       ইউজার তৈরি করুন

·       SQL Server Explorer দেখবেন:
AspNetUsersAspNetRolesAspNetUserRoles টেবিল আছে


✅ 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 লগ রাখা ভালো


 

Post a Comment

0 Comments

Step-by-Step ASP.NET Core MVC শেখার পরিকল্পনা (বাংলায়)