আজকের লেকচারে স্বাগতম!

কোথায় আছি আমরা? আপনি সদ্যই Clean Architecture এর মতো একটি গুরুত্বপূর্ণ এবং অ্যাডভান্সড সেকশন শেষ করে Section 25: Identity-তে প্রবেশ করেছেন। আজকের টপিকটি হলো Introduction to ASP.NET Core Identity। একটি আধুনিক অ্যাপ্লিকেশনে কীভাবে সিকিউর ইউজার লগইন, রেজিস্ট্রেশন এবং রোল ম্যানেজমেন্ট কাজ করে, তার মূল ভিত্তি আপনি আজ শিখতে যাচ্ছেন। চলুন শুরু করা যাক!


📝 Quick Summary for Revision

ভবিষ্যতে দ্রুত রিভিশন দেওয়ার জন্য পুরো লেকচারের মূল বিষয়গুলো নিচে লিস্ট করা হলো:

  • ASP.NET Core Identity: এটি ইউজার অ্যাকাউন্ট তৈরি এবং ম্যানেজ করার একটি বিল্ট-ইন API।
  • Core Features: ইউজার সেভ করা (CreateAsync), ভ্যালিডেশন, ইমেইল কনফার্মেশন, প্রোফাইল আপডেট, External Logins (Google/Facebook) এবং Role-based Authentication।
  • Supported Datastores: বাই ডিফল্ট SQL Server সাপোর্ট করে, তবে Oracle বা Azure Table Storage-ও ব্যবহার করা যায়।
  • Architecture Layers: * Database: ডেটা স্টোর করার জায়গা।
  • IdentityDbContext: Data Access Layer (Entity Framework এর সাধারণ DbContext থেকে ইনহেরিট করা)।
  • Identity Store: Repository Layer (যেমন: UserStore, RoleStore) যা DbContext এর উপর কাজ করে।
  • Identity Manager: Business Logic Layer (যেমন: UserManager, SignInManager) যা ভ্যালিডেশন এবং মূল লজিক হ্যান্ডেল করে।
  • Controllers: সবার উপরের লেয়ার, যা সরাসরি Manager ক্লাসের মেথড কল করে (যেমন: createUser)।

🧠 Comprehensive Breakdown

এখানে লেকচারের প্রতিটি বিষয় বিস্তারিতভাবে এবং সহজ করে ব্যাখ্যা করা হলো:

১. What is ASP.NET Core Identity? (Priority: 10/10)

ASP.NET Core Identity হলো মাইক্রোসফটের তৈরি একটি API, যা আপনার অ্যাপ্লিকেশনে ইউজার অ্যাকাউন্ট ম্যানেজমেন্টের সব কাজ সহজ করে দেয়। স্ক্র্যাচ থেকে সিকিউরিটি সিস্টেম তৈরি করা অনেক ঝুঁকিপূর্ণ। তাই ইউজারদের ডেটা স্টোর, রিট্রিভ এবং ভ্যালিডেট করার জন্য এই ফ্রেমওয়ার্কটি ব্যবহার করা হয়।

Why do we need this? নিজে থেকে পাসওয়ার্ড হ্যাশিং, কুকি ম্যানেজমেন্ট বা টোকেন জেনারেট করা বেশ কঠিন এবং সিকিউরিটি রিস্ক থাকে। Identity এই সব কিছু আউট-অফ-দ্য-বক্স (out-of-the-box) প্রোভাইড করে।

২. Core Features of Identity (Priority: 9/10)

লেকচারার এখানে Identity এর বেশ কিছু পাওয়ারফুল ফিচারের কথা উল্লেখ করেছেন:

  • User Registration: নতুন ইউজার তৈরি করার জন্য এটি CreateAsync এর মতো মেথড অফার করে।
  • Search & Validation: ইউজারদের ID বা Name দিয়ে খোঁজা এবং ইনপুট ডেটা ভ্যালিডেট করা।
  • Email Confirmation: রেজিস্ট্রেশনের পর ইমেইল ভেরিফিকেশন পাঠানো।
  • Profile Management: ইউজারের নাম, ইমেইল, ফোন নম্বর বা প্রোফাইল ইমেজ আপডেট করা।
  • External Logins: Third-party প্রোভাইডার যেমন: Google, Facebook, LinkedIn বা Apple দিয়ে লগইন করার সুবিধা।
  • Role-based Authentication: ইউজারদের ক্যাটাগরি বা Role অনুযায়ী ভাগ করা। উদাহরণস্বরূপ, ‘Customer’ রোল শুধু প্রোডাক্ট পেজ দেখতে পারবে, কিন্তু ‘Administrator’ রোল ড্যাশবোর্ড এবং সেটিংসে অ্যাক্সেস পাবে।

৩. Architecture of ASP.NET Core Identity (Priority: 10/10)

এটি এই লেকচারের সবচেয়ে গুরুত্বপূর্ণ অংশ। Identity কীভাবে কাজ করে তার একটি নির্দিষ্ট লেয়ার বা আর্কিটেকচার আছে।

নিচে নিচ থেকে উপরের দিকে লেয়ারগুলো ব্যাখ্যা করা হলো:

  • Database: সবার নিচে থাকে ডেটাবেস (যেমন: SQL Server), যেখানে ইউজারদের আসল ডেটা সেভ থাকে।
  • IdentityDbContext (Data Access Layer): এটি Entity Framework Core এর সাধারণ DbContext এর একটি স্পেশাল ভার্সন। এটি ডাটাবেসের সাথে কানেক্ট করার জন্য র (raw) SQL স্টেটমেন্ট অটোমেটিক জেনারেট করে।
  • Identity Store (Repository Layer): এটি IdentityDbContext এর ঠিক উপরে থাকে। এর ভেতরে UserStore এবং RoleStore এর মতো ক্লাস থাকে। এটি অনেকটা আমাদের শেখা Repository Pattern এর মতো কাজ করে।
  • Identity Manager (Business Logic Layer): আমরা সরাসরি Store বা DbContext ব্যবহার করি না। ইউজারের ডেটাবেসে ঢোকার আগে পাসওয়ার্ড ঠিক আছে কিনা বা ইমেইল ডুপ্লিকেট কিনা, এমন বিজনেস লজিকগুলো UserManager বা SignInManager হ্যান্ডেল করে।
  • Controllers: সবার উপরের লেয়ার। Controllers শুধুমাত্র Identity Manager এর সাথে কথা বলে।

💻 Code Implementation (How it looks in practice)

লেকচারে সরাসরি কোড দেখানো না হলেও, এই আর্কিটেকচারটি বাস্তবে কেমন দেখায় তা নিচে দেওয়া হলো:

Step 1: Setup IdentityDbContext

using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
 
// DbContext এর বদলে IdentityDbContext থেকে ইনহেরিট করতে হয়
public class ApplicationDbContext : IdentityDbContext<IdentityUser>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
        : base(options)
    {
    }
}
 

Step 2: Controller accessing Identity Manager খেয়াল করুন, Controller সরাসরি DbContext বা Store কল করছে না, সে UserManager কে ইনজেক্ট করছে।

using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
 
public class AccountController : Controller
{
    // Business Logic Layer (Manager) ইনজেক্ট করা হচ্ছে
    private readonly UserManager<IdentityUser> _userManager;
    private readonly SignInManager<IdentityUser> _signInManager;
 
    public AccountController(UserManager<IdentityUser> userManager, SignInManager<IdentityUser> signInManager)
    {
        _userManager = userManager;
        _signInManager = signInManager;
    }
 
    [HttpPost]
    public async Task<IActionResult> Register(string email, string password)
    {
        var user = new IdentityUser { UserName = email, Email = email };
        
        // Manager এর CreateAsync মেথড ব্যবহার করে ইউজার সেভ করা হচ্ছে
        var result = await _userManager.CreateAsync(user, password);
 
        if (result.Succeeded)
        {
            await _signInManager.SignInAsync(user, isPersistent: false);
            return RedirectToAction("Index", "Home");
        }
 
        return View();
    }
}
 

🌟 Best Practices

  • Use ViewModels/DTOs: View থেকে Controller-এ ডেটা আনার সময় সরাসরি IdentityUser ক্লাস ব্যবহার করবেন না। এর বদলে RegisterViewModel বা LoginViewModel তৈরি করুন।

  • Example: RegisterViewModel এর ভেতরে শুধুমাত্র Email, Password, এবং ConfirmPassword প্রপার্টি রাখুন।

  • Keep Controllers Thin: Controllers-এর কাজ শুধু রিকোয়েস্ট রিসিভ করা এবং রেসপন্স দেওয়া। ইউজার তৈরির পর ইমেইল পাঠানো বা অন্য কোনো কমপ্লেক্স লজিক থাকলে তা আলাদা Service ক্লাসে নিয়ে যাওয়া উচিত।

Modern Updates (.NET 8/10 Context): MVC প্যাটার্নে Identity এর কোর আর্কিটেকচার (UserManager, SignInManager, IdentityDbContext) .NET 6 থেকে .NET 10 পর্যন্ত প্রায় একই রকম আছে। তবে, লেটেস্ট ভার্সনগুলোতে মাইক্রোসফট Identity সেটআপ আরও সহজ করেছে। যদিও আপনি MVC আর্কিটেকচারে কাজ করছেন, তাই উপরের দেখানো প্যাটার্নটিই আপনার জন্য সবচেয়ে পারফেক্ট এবং স্ট্যান্ডার্ড।

পরবর্তী লেকচারগুলোতে আপনি এই থিওরিগুলোকেই প্রজেক্টে ইমপ্লিমেন্ট করা শুরু করবেন!