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

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

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

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 6998
پاسخ دهنده : 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
امتیاز: 1617 رتبه: 2
5 نظر
yasasemani : با سلام اگر نخواهیم از جداول مربوط به آیدنتیتی استفاده کنیم به چه صورت میشه ؟ مثلا جدولی برای کاربران داشته باشیم که نام کاربری و رمز هم جز فیلدهای ان تعریف شده باشد

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

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

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

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

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