دسته بندی ها
15:55 1399/11/20

چگونگی پیاده سازی سیستم لاگین در Asp.net Core

مشخصات سوال کننده :
کاربر : mehdijalili     امتیاز کاربر : 0     رتبه کاربر : 7073
دسته بندی : Asp.net Core

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 7103
هوش مصنوعی

پاسخ هوش مصنوعی

برای پیاده سازی سیستم ورود در ASP.NET Core، می توانید مراحل زیر را دنبال کنید:

1. نصب پکیج های مورد نیاز:
   ابتدا مطمین شوید که پکیج Microsoft.AspNetCore.Identity را در پروژه تان نصب کرده اید. این پکیج تمام ابزارهای لازم برای مدیریت هویت را فراهم می کند.

2. تنظیمات هویت:
   در کلاس Startup.cs، در متد ConfigureServices، Identity را پیکربندی کنید:

   public void ConfigureServices(IServiceCollection services)
   {
       services.AddDbContext(options =>
           options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
       
       services.AddIdentity()
           .AddEntityFrameworkStores()
           .AddDefaultTokenProviders();

       services.Configure(options =>
       {
           // تنظیمات مورد نظر مانند سیاست پسورد
           options.Password.RequireDigit = true;
           options.Password.RequireLowercase = true;
           options.Password.RequireUppercase = true;
           options.Password.RequireNonAlphanumeric = false;
           options.Password.RequiredLength = 6;
           options.Password.RequiredUniqueChars = 1;
           options.User.RequireUniqueEmail = true;
       });

       services.AddControllersWithViews();
   }

3. ساخت Controller برای مدیریت لاگین:
   یک کنترلر بسازید که با لاگین و لاگ آوت کار کند:

   public class AccountController : Controller
   {
       private readonly SignInManager _signInManager;
       private readonly UserManager _userManager;
   
       public AccountController(SignInManager signInManager, UserManager userManager)
       {
           _signInManager = signInManager;
           _userManager = userManager;
       }
   
       [HttpGet]
       public IActionResult Login()
       {
           return View();
       }
   
       [HttpPost]
       [ValidateAntiForgeryToken]
       public async Task Login(LoginViewModel model)
       {
           if (ModelState.IsValid)
           {
               var result = await _signInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);
               if (result.Succeeded)
               {
                   return RedirectToAction("Index", "Home");
               }
               ModelState.AddModelError(string.Empty, "Invalid login attempt.");
           }
           return View(model);
       }
   
       public async Task Logout()
       {
           await _signInManager.SignOutAsync();
           return RedirectToAction("Index", "Home");
       }
   }

4. ایجاد View برای لاگین:
   یک فایل Razor View (Login.cshtml) برای صفحه لاگین ایجاد کنید.

5. استفاده از Claim:
   برای استفاده از Claims، پس از ورود کاربر، می توانید اطلاعات کاربر را با استفاده از _userManager به Claims اضافه کنید.

   var claims = new List
   {
       new Claim(ClaimTypes.Email, user.Email),
       // اطلاعات دیگر که می خواهید اضافه کنید
   };

   var identity = new ClaimsIdentity(claims, "MyCookieAuth");
   await HttpContext.SignInAsync("MyCookieAuth", new ClaimsPrincipal(identity));

با این مراحل می توانید سیستمی برای مدیریت کاربر و ورود به برنامه ایجاد کنید. برای سیاست های دسترسی و مجوزها، می توانید از Claims و Policy ها استفاده کنید که به شما این امکان را می دهد تا مجوزهای مختلفی برای کاربران ایجاد کنید.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : fateme 00:06 1399/11/21

پیاده سازی سیستم لاگین در Asp.net Core توسط آیدنتیتی

 

پیاده سازی لاگین در Asp.net Core

 

برای اینکه بشه بهتر راهنمایی کرد باید کدهای خودتون رو هم قرار می دادید. اما در مجموع به نظر میاد شما جداول رو خودتون به صورت دستی ایجاد کردید که این مورد اشتباه هست. اشتباه از این لحاظ که وقتی شما جداول User و Role رو دستی ایجاد می کنید و از قواعد خود Identity پیروی نمیکنید دیگه به هیچ کدوم از قابلیتها و ویژگیهای Identity دسترسی ندارید و گستره بزرگی از امکانات رو از دست می دید.

 

پیاده سازی سیستم لاگین در Asp.net Core مورد ساده ای هست. ابتدا دقت کنید که شما باید سرویس Identity رو در پروژه خودتون راه اندازی کرده باشید. برای این منظور مراحل زیر رو دنبال کنید.

 

مرحله اول : تنظیمات کلاس ApplicationDbContext

خب شما در انتیتی فریم ورک برای کار با دیتابیس نیاز به یک کلاس دارید که از کلاس DbContext مشتق بشه. این کلاس نماینده دیتابیس شما در پروژه شما خواهد بود. دقت کنید وقتی می خواهید از Identity استفاده کنید به جای DbContext باید از کلاس IdentityDbContext استفاده کنید تا جداول مربوط به آیدنتیتی هم به صورت اتوماتیک ایجاد بشه. بنابراین کلاس ApplicationDbContext شما مشابه زیر خواهد بود.

 

public class ApplicationDbContext : IdentityDbContext<ApplicationUsers, ApplicationRoles, string>
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> option) : base(option)
    {
              
    }
}

دقت کنید که برای استفاده از آیدنتیتی و در ادامه مایگریشن به پکیج های زیر نیاز خواهید داشت. بنابراین این پکیج ها را به پروژه اضافه کنید.

Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.SqlServer

همونطوری که می بینید در این کلاس دو کلاس به نام های ApplicationUsers و ApplicationRoles هم استفاده شده. این دو کلاس به ترتیب نماینده جدول AspNetUser و AspNetRoles که جدول کاربران و جدول نقش ها هستن می باشد. بنابراین باید این دو کلاس هم به وجود بیارید.

 

مرحله دوم: ایجاد کلاس ApplicationUsers

public class ApplicationUsers : IdentityUser
{
  
}

 

مرحله سوم : ایجاد کلاس ApplicationRoles

public class ApplicationRoles : IdentityRole
{

}

مرحله چهارم : راه اندازی سرویس Identity و DataBase در startup.cs

خب حالا باید در کلاس Startup.cs سرویس های مربوط به دیتابیس و آیدنیتی را راه اندازی کنیم. بنابراین در متد دستورات زیر را بنویسید.

public void ConfigureServices(IServiceCollection services)
{
     //DataBaseService
       services.AddDbContext<ApplicationDbContext>(option =>
        option.UseSqlServer(Configuration.GetConnectionString("MyConnectionString")));

     //Identity Service
       services.AddIdentity<ApplicationUsers, ApplicationRoles>()
         .AddEntityFrameworkStores<ApplicationDbContext>()
         .AddDefaultTokenProviders();

       services.AddControllersWithViews();
}

خب در دستورات بالا سرویس مربوط به دیتابیس و آیدنتیتی را راه اندازی کردیم. در این دستورات نیاز به ConnectionString داریم که در جلوی متد GetConnectionString نام کانکشن استرینگ را نوشته ایم که در این مثال MyConnectionString می باشد. این کانکشن باید در فایل appsettings.json تعریف شود.

 

مرحله پنجم : ایجاد کانکشن استرینگ در appsettings.json

برای نوشتن کانکشن استرینگ در appsettings.json به صورت زیر عمل کنید.

{
  "ConnectionStrings": {
    "MyConnectionString" : "Data Source=.; Initial Catalog=DataBaseName; user Id=sa; Password=***"
  },

  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*"
}

 

مرحله ششم : استفاده از Migration و ایجاد دیتابیس

خب الان همه چیز آماده است. بنابراین با استفاده از دستورات مایگریشن دیتابیس را ایجاد می کنیم.

//اسجاد مایگریشن
add-migration initial
.
.
.
//به روز رسانی دیتابیس
update-database

بعد از ایجاد و به روزرسانی دیتابیس شما به همراه 7 جدول مربوط به آیدنتیتی آماده استفاده می باشد. این جداول در تصویر زیر مشخص می باشد.

جداول آیدنتیتی کدام است

 

خب ببینید الان شما ساختار جداول رو به طور کامل دارید و همه جداول آیدنتیتی رو هم دارید. جدول AspNetUsers همون جدولی هست که اسامی و مشخصات کاربران شما در اون ذخیره میشه. بنابراین بعد از اینکه چند کاربر رو توش ذخیره کردید می تونید عملیات لاگین رو هم انجام بدید.

 

چگونه یک فرم لاگین در Asp.net Core توسط آیدنتیتی ایجاد کنیم ؟

یک کنترلر به نام Account در پروزه خودتون ایجاد کنید. یک اکشن به نام Login هم ایجاد کنید و برای این اکشن یک View به نام Login ایجاد کنید.

 

کنترلر Account

public class AccountController : Controller
{
   private readonly SignInManager<ApplicationUsers> _signInManager;
   private readonly UserManager<ApplicationUsers> _userManager;

   public AccountController(SignInManager<ApplicationUsers> signInManager,UserManager<ApplicationUsers> userManager)
   {
       _signInManager = signInManager;
       _userManager = userManager;
    }

   [HttpGet]
   public async Task<IActionResult> Login()
   {
      return View();
   }
}

در دستورات بالا کنترلر Account رو می بینید. در بالای این کنترلر دو متغیر به نام های _userManager و _signInManager ایجاد کردیم. این دو متغیر به ترتیب از کلاس های UserManager و SignInManager مشتق شدن. این دو کلاس شامل توابع و متدهای بسیار زیاد و کاربردی برای عملیات لاگین، ثبت نام و کلیه کارهای مربوط به آیدنتیتی هستن.

 

ویوی Login.cshtml

@model LoginViewModel

<form asp-controller="Account" asp-action="Login" method="post">

            <!--نام کاربری-->
            <div class="form-group col-xs-12 col-md-12">
                <div class="input-group">
                    <input asp-for="UserName" type="text" class="form-control" autocomplete="off" placeholder="نام کاربری" />
                </div>
            </div>

            <!--رمز عبور-->
            <div class="form-group col-xs-12 col-md-12">
                <div class="input-group">
                    <input asp-for="Password" type="password" class="form-control" autocomplete="off" placeholder="رمز عبور" />
                </div>
            </div>

            <!--دکمه ورود-->
            <div class="form-group col-xs-12">
                <div>
                    <input type="submit" class="btn btn-dark center-block" value="ورود" />
                </div>
                
            </div>
        </form>

خب در ویوی بالا با زدن دکمه "ورود" اطلاعات به سمت کنترلر Account و اکشن Login ارسال میشه. بنابراین در بخش کنترلر برای انجام عملیات Login کدهای زیر رو می نویسیم. همچنین از یک ViewModel به نام LoginViewModel هم در بالای ویو به عنوان مدل استفاده شده.

 

LoginViewModel

public class LoginViewModel
{
    [Display(Name = "نام کاربری")]
    public string UserName { get; set; }

    [Display(Name = "رمز عبور")]
    public string Password { get; set; }
}

 

 

اکشن Login با ویژگی HttpPost

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginViewModel model)
{
   if (ModelState.IsValid)
   {
      var user = await _userManager.FindByNameAsync(model.UserName);
      var result = await _signInManager.PasswordSignInAsync(model.UserName, model.Password, true, lockoutOnFailure: false);
       if (result.Succeeded)
       {
           return Redirect("/yourpath");
       }
       else
       {
           ModelState.AddModelError("Password", "اطلاعات ورود صحیح نیست");
           return View(model);
       }
    }
    return View(model);
}

 

خب این یه آموزش کامل از نحوه پیاده سازی سیستم لاگین در Asp.net Core با استفاده از آیدنتیتی بود.

ویرایش شده در سه شنبه 21 بهمن 1399 ساعت 00:22:05
به این پاسخ امتیاز بدهید    3
امتیاز: 1635 رتبه: 2
5 نظر
yasasemani : با سلام اگر نخواهیم از جداول مربوط به آیدنتیتی استفاده کنیم به چه صورت میشه ؟ مثلا جدولی برای کاربران داشته باشیم که نام کاربری و رمز هم جز فیلدهای ان تعریف شده باشد

امتیاز کاربر : 6   رتبه کاربر : 80   تاریخ ثبت : 10:51 1400/01/29
fateme : اگر نخواید از آیدنتیتی استفاده کنید که دیگه خیلی ساده است. یه جدول برای یوزرها ایجاد کنید و دو تا فیلد رمز عبور و نام کاربری هم براش بذارید و موقع لاگین اطلاعاتی که کاربر وارد میکنه رو با اطلاعات داخل جدول مقایسه کنید که صحیح هست یا نه.

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 02:38 1400/01/30
khobyari : سلام. وقت بخیر. ممنون از آموزش خوبتون اما از قسمت ویوی Login.cshtml مشخص نشده فایل ها در کجا ایجاد شوند. لطفا این مسیرها را مشخص کنید تا من مبتدی بتونم کار رو تا اخر انجام بدم. سپاس بیکران

امتیاز کاربر : 0   رتبه کاربر : 7073   تاریخ ثبت : 12:52 1400/06/12
fateme : فرقی نمیکنه فایل کجا ایجاد بشه. شما توی قسمت Views و در پوشه Shared ایجاد کنید.

امتیاز کاربر : 1635   رتبه کاربر : 2   تاریخ ثبت : 08:07 1400/06/14
Kamran : عرض ادب امکانش هست فایلی که شما الان متن هاشو گذاشتید رو بزارید تا دانلود کنیم مثلا قسمت کلاس یوزر و رول ها واقعا کلافه شدم. ممنون

امتیاز کاربر : 0   رتبه کاربر : 7073   تاریخ ثبت : 03:28 1402/06/18
ادامه نظرات ...
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود