کوکیز کی تصدیق کا استعمال کرتے ہوئے لاگ ان میکانزم بنائیں ، اور اگر آپ تصدیق شدہ نہیں ہیں تو ری ڈائریکٹ کرنے کے لئے ایک میکانزم بنائیں۔

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

آپریٹنگ ماحول

Visual Studio
  • Visual Studio Community 2022
ASP.NET کور (ایم وی سی، ریزر صفحات)
6.0

سب سے پہلے

اس بار ، ASP.NET کور لاگ ان تصدیق کے میکانزم کے طور پر کوکی کی توثیق کا استعمال کرے گا۔ آپ کوکیز کی توثیق کو روایتی شکلوں کی توثیق سے ملتا جلتا سمجھ سکتے ہیں۔

کور کے لئے ایک اور توثیقی میکانزم ASP.NET بنیادی شناخت ASP.NET ہے۔ فارم کا استعمال کرتے ہوئے توثیق کے علاوہ ، یہ آپ کو اے پی آئی کے ساتھ تصدیق کرنے ، بیرونی لاگ ان خدمات کا استعمال کرنے ، پاس ورڈ کا انتظام اور ری سیٹ کرنے وغیرہ کی اجازت دیتا ہے۔ آپ بہت ساری خصوصیات استعمال کر سکتے ہیں. تاہم ، اس بار صرف ایک سادہ لاگ ان اسکرین بنانے کے نقطہ نظر سے ، یہ کسی حد تک مبالغہ آمیز توثیقی میکانزم ہوگا۔ ہم اس بار اسے استعمال نہیں کریں گے.

اس بار متعارف کرائی گئی کوکیز کی تصدیق کے نکات میں ، آپ لاگ ان اسکرین کے علاوہ کچھ بھی ظاہر نہیں کرسکتے ہیں جب تک کہ آپ لاگ ان نہ ہوں۔ اگر آپ کسی دوسری اسکرین پر جانے کی کوشش کرتے ہیں تو ، آپ کو لاگ ان اسکرین پر ری ڈائریکٹ کیا جائے گا۔ اگر آپ لاگ ان کرتے ہیں تو ، آپ دوسری اسکرینیں دیکھ سکتے ہیں۔

فی الحال ، آپ لاگ ان اسکرین پر اپنا صارف نام اور پاس ورڈ درج کرکے لاگ ان کرسکتے ہیں۔ صارف کی توثیق خود ایک عارضی جگہ کے طور پر نافذ کی جاتی ہے. اس معاملے میں ، بنیادی توجہ کوکی توثیق کے نفاذ پر ہے ، لہذا تعین کے عمل کا جوہر جیسے کہ پاس ورڈ صحیح ہے یا نہیں جوہر نہیں ہے۔

یہ ٹوٹکا پروگرام کے صرف ایک حصے کی وضاحت کرتا ہے۔ مکمل کوڈ کے لئے، مکمل پروگرام ڈاؤن لوڈ کریں. اس میں ایم وی سی اور ریزر پیجز فریم ورک دونوں کا بھی احاطہ کیا گیا ہے۔

ایک منصوبہ بنائیں

بصری اسٹوڈیو شروع کریں اور ایک نیا منصوبہ بنائیں۔

ریزر صفحات کے لئے ، کور ویب ایپ ASP.NET منتخب کریں ، یا ایم وی سی کے لئے ، کور ویب ایپ (ماڈل ویو کنٹرولر) ASP.NET منتخب کریں۔

اپنی پسند کے پروجیکٹ کا نام اور پروجیکٹ کے لئے ایک مقام کی وضاحت کریں۔

توثیق کی قسم کے لئے ، "کوئی نہیں" منتخب کریں۔ اگر آپ دیگر توثیق کا انتخاب کرتے ہیں تو ، آپ بنیادی شناخت ASP.NET استعمال کریں گے۔ جب آپ ترتیبات کے ساتھ کام مکمل کرلیں تو ، "تخلیق کریں" بٹن پر کلک کریں۔

پروجیکٹ بنانے کے بعد ، جب ڈیبگنگ کی جاتی ہے تو نیچے دکھائی جانے والی اسکرین دکھائی جائے گی۔ ہم اس سکرین کی بنیاد پر ایک پروگرام بنائیں گے۔

پروگرام میں ترمیم کریں.cs (ریزر صفحات، ایم وی سی کامن)

کوکیز کی توثیق کے لئے درکار تعریفوں کو پروگرام .cs میں شامل کریں۔ شامل کیے جانے والے نام کی جگہیں درج ذیل ہیں:

using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;

یہاں شامل کرنے کے builder.Services لئے کوڈ ہے.

// === 省略 ===

// 「Razor Pages」のコード
// builder.Services.AddRazorPages();
// 「MVC」のコード
// builder.Services.AddControllersWithViews();

// ※ここから追加

// Cookie による認証スキームを追加する
builder.Services
  .AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
  .AddCookie();

builder.Services.AddAuthorization(options =>
{
  // AllowAnonymous 属性が指定されていないすべての画面、アクションなどに対してユーザー認証が必要となる
  options.FallbackPolicy = new AuthorizationPolicyBuilder()
    .RequireAuthenticatedUser()
    .Build();
});

// ※ここまで追加

var app = builder.Build();

// === 省略 ===

AddAuthenticationAddCookie آپ اور طریقہ کار پر عمل کرکے کوکیز کی توثیق کو فعال کرسکتے ہیں۔ اگر آپ کو اسکیم کا نام تبدیل کرنے کی ضرورت نہیں ہے تو ، CookieAuthenticationDefaults.AuthenticationScheme وضاحت کریں۔

AddAuthorization اگر آپ options.FallbackPolicy RequireAuthenticatedUser طریقہ کار کی وضاحت کرتے ہیں آپ تمام صفحات ، تمام کنٹرولرز ، اور اقدامات پر توثیق کی مطلوبہ پالیسی لاگو کرسکتے ہیں۔ اگر آپ لاگ ان اسکرین کے علاوہ کسی اور چیز کے لئے توثیق کی ضرورت چاہتے ہیں تو ، یہ کوڈ کو کم کرنے اور وضاحت میں غلطیوں کو روکنے کے لحاظ سے ایک مفید طریقہ ہے۔ آپ کو کوڈ لکھنا ہوگا جس میں لاگ ان اسکرین کے لئے الگ سے توثیق کی ضرورت نہیں ہے۔

مندرجہ ذیل کے لئے کوڈ ہے app .

// === 省略 ===

app.UseRouting();

app.UseAuthentication(); // [追加] 認証
app.UseAuthorization(); // 認可

// 「Razor Pages」のコード
// app.MapRazorPages();
// 「MVC」のコード
// app.MapControllerRoute(
//     name: "default",
//     pattern: "{controller=Home}/{action=Index}/{id?}");

// === 省略 ===

چونکہ ہم درخواست میں توثیق کی فعالیت شامل کرنا چاہتے ہیں ، app.UseAuthentication() لہذا ہم شامل کریں گے۔ تفصیل کا مقام ایم ایس ڈی این دستاویزات ، ایپ کے مطابق ہے۔ اتھارٹی کا استعمال کریں(). اس کے علاوہ ، یہ اب بھی ایک ٹیمپلیٹ ہے۔

ریزر صفحات کے منصوبوں کے لئے پروگرام

لاگ ان صفحہ بنائیں (Pages/Account/login.cshtml.cs)

ایک فائل بنائیں

لاگ ان صفحہ بنائیں۔ فائل کا راستہ "/ صفحات / اکاؤنٹ / لاگ ان ڈاٹ سی ایس ٹی ایم ایل" کے طور پر بنایا جانا چاہئے۔ اس کی وجہ یہ ہے کہ پہلے سے طے شدہ لاگ ان راستہ ایسا ہی ہے۔ اگر آپ اس راستے کو تبدیل کرنا چاہتے ہیں تو ، آپ Program.cs طریقہ کار کی دلیل مقرر کرکے ایسا کرسکتے AddCookie ہیں۔

آپ اسے مینو سے بنانے کے بجائے دوسری فائلوں کو کاپی کرکے بنا سکتے ہیں ، لیکن اس صورت میں ، براہ کرم پروگرام کو صحیح طریقے سے ٹھیک کریں۔

صارفین کو لاگ ان کیے بغیر لاگ ان صفحے تک رسائی کی اجازت دیں

Program.cs چونکہ تمام صفحات تک صرف اس وقت رسائی حاصل کی جاسکتی ہے جب آپ لاگ ان ہوں ، لہذا آپ کو صرف لاگ ان پیج سیٹ کرنے کی ضرورت ہے تاکہ آپ لاگ ان نہ ہونے کے باوجود اس تک رسائی حاصل کرسکیں۔

AllowAnonymous خصوصیات شامل کرکے ، ہدف کے صفحے تک رسائی حاصل کی جاسکتی ہے چاہے وہ تصدیق شدہ نہ ہو۔ AllowAnonymous خصوصیات لاگ ان اسکرین کے علاوہ دیگر جگہوں پر استعمال کی جاسکتی ہیں ، جیسے اے پی آئی آپریشنز کا کوکی تصدیق سے کوئی تعلق نہیں ہے۔

using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Security.Claims;

namespace AspNetCoreCookieAuthenticationRazorPages.Pages.Account
{
  [AllowAnonymous]
  public class LoginModel : PageModel
  {
  }
}

ان پٹ وصول کرنے کے لئے متغیر بنائیں

جب آپ لاگ ان کرتے ہیں تو ، آپ اپنے صارف نام کو ان اقدار کو حاصل کرنے کے قابل قرار دیتے ہیں کیونکہ آپ اپنا پاس ورڈ درج کرتے ہیں۔

// 省略

[AllowAnonymous]
public class LoginModel : PageModel
{
  /// <summary>ユーザー名。</summary>
  [BindProperty]
  [Required]
  [DisplayName("ユーザー名")]
  public string UserName { get; set; } = "";

  /// <summary>パスワード。</summary>
  [BindProperty]
  [Required]
  [DataType(DataType.Password)]
  [DisplayName("パスワード")]
  public string Password { get; set; } = "";
}

لاگ ان توثیق کے لئے صارف نام اور پاس ورڈ کی وضاحت کریں

اصل میں ، یہ ڈیٹا بیس وغیرہ میں ذخیرہ کیا جائے گا ، لیکن چونکہ اس بار صارف کا فیصلہ مرکزی توجہ کا مرکز نہیں ہے ، لہذا میں اسے ایک عارضی جگہ بناؤں گا۔

// 省略

[AllowAnonymous]
public class LoginModel : PageModel
{
  // 省略

  /// <summary>仮のユーザーデータベースとする。</summary>
  private Dictionary<string, string> UserAccounts { get; set; } = new Dictionary<string, string>
    {
      { "user1", "password1" },
      { "user2", "password2" },
    };
}

لاگ ان کا عمل

/// <summary>ログイン処理。</summary>
public async Task<ActionResult> OnPost()
{
  // 入力内容にエラーがある場合は処理を中断してエラー表示
  if (ModelState.IsValid == false) return Page();

  // ユーザーの存在チェックとパスワードチェック (仮実装)
  // 本 Tips は Cookie 認証ができるかどうかの確認であるため入力内容やパスワードの厳密なチェックは行っていません
  if (UserAccounts.TryGetValue(UserName, out string? getPass) == false || Password != getPass)
  {
    ModelState.AddModelError("", "ユーザー名またはパスワードが一致しません。");
    return Page();
  }

  // サインインに必要なプリンシパルを作る
  var claims = new[] { new Claim(ClaimTypes.Name, UserName) };
  var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
  var principal = new ClaimsPrincipal(identity);

  // 認証クッキーをレスポンスに追加
  await HttpContext.SignInAsync(principal);

  // ログインが必要な画面にリダイレクトします
  return RedirectToPage("/Index");
}

یہ لاگ ان بٹن دبانے کے بعد توثیق کا عمل ہے۔ اگر صارف کا نام اور پاس ورڈ میل کھاتا ہے تو تصدیق ممکن ہے۔

بیان کردہ کوڈ تصدیق کے لئے ضروری کم از کم کوڈ ہے،ClaimClaimsIdentityClaimsPrincipal اور HttpContext.SignInAsync طریقہ کار کو کال کرکے ، ایک کوکی تیار اور تصدیق کی جاتی ہے۔

اگر اضافی دعووں کی ضرورت ہے یا کوکیز کی میعاد ختم ہونے کی ضرورت ہے تو ، اضافی پیرامیٹرز شامل کیے جاتے ہیں۔

لاگ ان کرنے کے بعد ، آپ کو ری ڈائریکٹ کیا جاتا ہے ، جہاں /Index توثیق کی ضرورت ہوتی ہے۔

Logout process

/// <summary>ログアウト処理。</summary>
public async Task OnGetLogout()
{
  // 認証クッキーをレスポンスから削除
  await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
}

Logout جب ہینڈلر کے ساتھ رسائی حاصل کی جاتی ہے تو ، اسے لاگ آؤٹ کرنے کے لئے پروسیس کیا جاتا ہے۔ HttpContext.SignOutAsync طریقہ پر کال کرکے ، آپ کوکیز کو حذف کرسکتے ہیں اور اسے ایسی حالت میں واپس کرسکتے ہیں جہاں آپ لاگ ان نہیں ہیں۔

ایک منظر تخلیق کرنا

ہم ظاہری شکل کو مدنظر نہیں رکھتے ہیں۔ جیسا کہ ذیل میں دکھایا گیا ہے اپنا صارف نام اور پاس ورڈ درج کرنے کے لئے فیلڈز شامل کریں ، اور لاگ ان کرنے کے لئے ایک بٹن رکھیں۔ آپ کے پاس جانچ کے لئے لاگ ان کیے بغیر رسائی حاصل کرنے کے لئے ایک لنک بھی ہونا چاہئے /Index ۔

چونکہ صارف کا نام اور پاس ورڈ درج کرنا مشکل ہے ، لہذا ابتدائی قیمت مقرر ہے۔

@page
@model AspNetCoreCookieAuthenticationRazorPages.Pages.Account.LoginModel
@{}

<form asp-action="Login">
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    </div>
  </div>

  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="UserName" class="form-label"></label>
      <input asp-for="UserName" class="form-control" value="user1" />
      <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="Password" class="form-label"></label>
      <input asp-for="Password" class="form-control" value="password1" />
      <span asp-validation-for="Password" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <button type="submit" class="btn btn-primary">ログイン</button>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <a asp-page="/Index">認証が必要な画面へ直接リンク</a>
    </div>
  </div>
</form>

@section Scripts {
  @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

لاگ آؤٹ لنک بنائیں (/Pages/Shared/_Layout.cshtml)

ہم ہوم اسکرین میں کوئی تبدیلی نہیں کریں گے ، لیکن ہم نیویگیشن بار میں لاگ آؤٹ لنک ڈالیں گے۔ اس کے علاوہ ، جانچ کے لئے ، ایک لنک پوسٹ کریں جو آپ کو لاگ آؤٹ کیے بغیر لاگ ان اسکرین پر لے جاتا ہے۔

<!-- 中略 -->
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
  <ul class="navbar-nav flex-grow-1">
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
    </li>
    <!-- ここから追加 -->
    <li class="nav-item">
      <a class="nav-link text-dark" asp-page="/Account/Login" asp-page-handler="Logout">ログアウト</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-page="/Account/Login">ログアウトせずログインへ</a>
    </li>
    <!-- ここまで追加 -->
  </ul>
</div>
<!-- 中略 -->

یہ ریزر پیجز کوڈ کے لئے ہے۔

ایم وی سی منصوبوں کے لئے پروگرام

لاگ ان ماڈل بنانا

آپ نے لاگ ان اسکرین پر درج اقدار کو وصول کرنے کے لئے ایک ماڈل بنایا ہے۔

namespace AspNetCoreCookieAuthenticationMvc.Models
{
  public class LoginModel
  {
    /// <summary>ユーザー名。</summary>
    [Required]
    [DisplayName("ユーザー名")]
    public string UserName { get; set; } = "";

    /// <summary>パスワード。</summary>
    [Required]
    [DataType(DataType.Password)]
    [DisplayName("パスワード")]
    public string Password { get; set; } = "";
  }
}

اکاؤنٹ کنٹرولر بنانا

لاگ ان اسکرین بنانے کے لئے درکار کنٹرولرز اور کارروائیاں بنائیں۔ کنٹرولر کا نام AccountController اس طرح بنائیں۔ اس کی وجہ یہ ہے کہ پہلے سے طے شدہ طور پر ، لاگ ان اسکرین پر کنٹرولر کا نام اور ایکشن نام "~ / اکاؤنٹ / لاگ ان" پر سیٹ کیا گیا ہے۔ اگر آپ اس راستے کو تبدیل کرنا چاہتے ہیں تو ، آپ پروگرام .cs میں طریقہ کار کے AddCookie اختیارات میں ایسا کرسکتے ہیں۔ فی الحال ، ہم پہلے سے طے شدہ ترتیبات کے ساتھ آگے بڑھیں گے۔

سب سے پہلے ، آئیے کنٹرولر سائیڈ بنائیں۔

using AspNetCoreCookieAuthenticationMvc.Models;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

namespace AspNetCoreCookieAuthenticationMvc.Controllers
{
  /// <remarks>
  /// <see cref="AllowAnonymous"/> 属性は Cookie 認証していなくてもアクセスできる Action (Controller) であることを示す。
  /// </remarks>
  [AllowAnonymous]
  public class AccountController : Controller
  {
  }
}

AllowAnonymous صفت کو عطا کرکے ، اس میں تمام اعمال تصدیق کے بغیر انجام دیئے جاسکتے ہیں۔ یہ آپ کو تصدیق کے بغیر صرف لاگ ان اسکرین تک رسائی حاصل کرنے کی اجازت دیتا ہے.

AllowAnonymous خصوصیات کو صرف اے پی آئی کنٹرولرز میں بھی استعمال کیا جاسکتا ہے جو لاگ ان اسکرین کے علاوہ دوسری جگہوں پر کوکی کی توثیق سے متعلق نہیں ہیں۔

اگلا ، صارفین اور پاس ورڈ کی وضاحت کریں جو لاگ ان کرسکتے ہیں۔ اصل میں ، یہ ڈیٹا بیس وغیرہ میں ذخیرہ کیا جائے گا ، لیکن چونکہ اس بار صارف کا فیصلہ مرکزی توجہ کا مرکز نہیں ہے ، لہذا میں اسے ایک عارضی جگہ بناؤں گا۔

[AllowAnonymous]
public class AccountController : Controller
{
  /// <summary>仮のユーザーデータベースとする。</summary>
  private Dictionary<string, string> UserAccounts { get; set; } = new Dictionary<string, string>
    {
      { "user1", "password1" },
      { "user2", "password2" },
    };
}

مندرجہ ذیل ایک عمل ہے جو لاگ ان اسکرین دکھاتا ہے۔ چونکہ یہ صرف ظاہر کیا جاتا ہے ، لہذا یہ ویو کو ویسے ہی واپس کرتا ہے۔

/// <summary>ログイン画面を表示します。</summary>
public IActionResult Login() => View();

ذیل میں لاگ ان کرتے وقت پروسیس کیا جانے والا کوڈ ہے۔

/// <summary>ログイン処理を実行します。</summary>
[HttpPost]
public async Task<IActionResult> Login(LoginModel model)
{
  // 入力内容にエラーがある場合は処理を中断してエラー表示
  if (ModelState.IsValid == false) return View(model);

  // ユーザーの存在チェックとパスワードチェック (仮実装)
  // 本 Tips は Cookie 認証ができるかどうかの確認であるため入力内容やパスワードの厳密なチェックは行っていません
  if (UserAccounts.TryGetValue(model.UserName, out string? getPass) == false || model.Password != getPass)
  {
    ModelState.AddModelError("", "ユーザー名またはパスワードが一致しません。");
    return View(model);
  }

  // サインインに必要なプリンシパルを作る
  var claims = new[] { new Claim(ClaimTypes.Name, model.UserName) };
  var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
  var principal = new ClaimsPrincipal(identity);

  // 認証クッキーをレスポンスに追加
  await HttpContext.SignInAsync(principal);

  // ログインが必要な画面にリダイレクトします
  return RedirectToAction(nameof(HomeController.Index), "Home");
}

یہ لاگ ان بٹن دبانے کے بعد توثیق کا عمل ہے۔ اگر صارف کا نام اور پاس ورڈ میل کھاتا ہے تو تصدیق ممکن ہے۔

بیان کردہ کوڈ تصدیق کے لئے ضروری کم از کم کوڈ ہے،ClaimClaimsIdentityClaimsPrincipal اور HttpContext.SignInAsync طریقہ کار کو کال کرکے ، ایک کوکی تیار اور تصدیق کی جاتی ہے۔

اگر اضافی دعووں کی ضرورت ہے یا کوکیز کی میعاد ختم ہونے کی ضرورت ہے تو ، اضافی پیرامیٹرز شامل کیے جاتے ہیں۔

لاگ ان کرنے کے بعد ، آپ کو ری ڈائریکٹ کیا جاتا ہے ، جہاں ~/Home/Index توثیق کی ضرورت ہوتی ہے۔

آخر میں ، لاگ آؤٹ کا عمل شامل کیا جاتا ہے۔

/// <summary>ログアウト処理を実行します。</summary>
public async Task<IActionResult> Logout()
{
  // 認証クッキーをレスポンスから削除
  await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);

  // ログイン画面にリダイレクト
  return RedirectToAction(nameof(Login));
}

HttpContext.SignOutAsync طریقہ پر کال کرکے ، آپ کوکیز کو حذف کرسکتے ہیں اور اسے ایسی حالت میں واپس کرسکتے ہیں جہاں آپ لاگ ان نہیں ہیں۔

ایک نظارہ بنائیں (لاگ ان فارم) (/Views/Account/Login.cshtml)

Login ایک نظارہ شامل کرنے کے لئے عمل پر دائیں کلک کریں۔ آپ اسے کسی دوسری فائل سے کاپی کرکے بھی بنا سکتے ہیں۔

ہم ظاہری شکل کو مدنظر نہیں رکھتے ہیں۔ جیسا کہ ذیل میں دکھایا گیا ہے اپنا صارف نام اور پاس ورڈ درج کرنے کے لئے فیلڈز شامل کریں ، اور لاگ ان کرنے کے لئے ایک بٹن رکھیں۔ آپ کے پاس جانچ کے لئے لاگ ان کیے بغیر رسائی حاصل کرنے کے لئے ایک لنک بھی ہونا چاہئے Home/Index ۔

چونکہ صارف کا نام اور پاس ورڈ درج کرنا مشکل ہے ، لہذا ابتدائی قیمت مقرر ہے۔

@model LoginModel
@{}

<form asp-action="Login">
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <div asp-validation-summary="ModelOnly" class="text-danger"></div>
    </div>
  </div>

  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="UserName" class="form-label"></label>
      <input asp-for="UserName" class="form-control" value="user1" />
      <span asp-validation-for="UserName" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <label asp-for="Password" class="form-label"></label>
      <input asp-for="Password" class="form-control" value="password1" />
      <span asp-validation-for="Password" class="text-danger"></span>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <button type="submit" class="btn btn-primary">ログイン</button>
    </div>
  </div>
  <div class="row m-1 g-3">
    <div class="col-sm-6 offset-sm-3">
      <a asp-controller="Home" asp-action="Index">認証が必要な画面へ直接リンク</a>
    </div>
  </div>
</form>

@section Scripts {
  @{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}

لاگ آؤٹ لنک بنائیں (/Views/Shared/_Layout.cshtml)

ہم ہوم اسکرین میں کوئی تبدیلی نہیں کریں گے ، لیکن ہم نیویگیشن بار میں لاگ آؤٹ لنک ڈالیں گے۔ اس کے علاوہ ، جانچ کے لئے ، ایک لنک پوسٹ کریں جو آپ کو لاگ آؤٹ کیے بغیر لاگ ان اسکرین پر لے جاتا ہے۔

<!-- 中略 -->
<div class="navbar-collapse collapse d-sm-inline-flex flex-sm-row-reverse">
  <ul class="navbar-nav flex-grow-1">
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a>
    </li>
    <!-- ここから追加 -->
    <li class="nav-item">
      <a class="nav-link text-dark" asp-controller="Account" asp-action="Logout">ログアウト</a>
    </li>
    <li class="nav-item">
      <a class="nav-link text-dark" asp-controller="Account" asp-action="Login">ログアウトせずログインへ</a>
    </li>
    <!-- ここまで追加 -->
  </ul>
</div>
<!-- 中略 -->

یہ ایم وی سی کوڈ کے لئے ہے.

آپریشن کی تصدیق

یہ کوکیز کی توثیق کے کم از کم مطلوبہ نفاذ کو مکمل کرتا ہے. اسے چلانے کی کوشش کریں اور دیکھیں کہ یہ کیسے کام کرتا ہے۔ آپ لاگ ان ہیں یا نہیں اس پر منحصر ہے کہ طرز عمل تبدیل ہونا چاہئے۔ ایک سادہ مثال کے طور پر، آپ مندرجہ ذیل طرز عمل دیکھ سکتے ہیں.

آپریشن آپریشن کے نتائج
لاگ ان کیے بغیر گھر جائیں لاگ ان اسکرین پر ری ڈائریکٹ کریں
لاگ ان ہوم اسکرین پر جائیں
گھر سے لاگ آؤٹ کریں اور لاگ ان کیے بغیر گھر جائیں لاگ ان اسکرین پر ری ڈائریکٹ کریں
گھر سے لاگ ان کیے بغیر اور لاگ ان کیے بغیر گھر جائیں ہوم اسکرین پر جائیں