ben

OMÜ , Bilgisayar Mühendisliği, 13'

21 Eylül 2022 Çarşamba

Authentication Cookie

Oturum açan kişinin bilgileri için aşağıdaki ayarları yapmamız gerekir. Startup.cs dosyasının Configure altına aşağıdaki komutları yazalım.

              app.UseAuthentication();

Startup.cs altındaki ConfigureServices altına ise aşağıdaki komutları ekleyelim.


 services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie(
                options =>
                {
                    options.LoginPath = "/User/SignIn";
                    options.Cookie.Name = "UserDetail";
                    options.AccessDeniedPath = "/User/SignIn";
                }
                );

UserController daki SignIn(post) fonksiyonunda kullanıcı değerlerinin doğru oldugu yere cookie işlemini yapalım. Cookiye kullanıcının bilgilerini ekleyelim ki oturum açan kişi ile ilgili işlemlerde bilgilerini çekebileleim.

public async Task<IActionResult>  SignIn(User user)
        {
            if (!ModelState.IsValid)
            {  //validasyonlardan geçemedi
                return View(new User());
            }
            User luser = _repoUser.IsUserLogin(user.UserName);
            if (luser != null)
            {
                bool isvalid = BCrypt.Net.BCrypt.Verify(user.Password, luser.Password);
                if (isvalid)
                {
                    List<Claim> claims = new List<Claim>() {
                        new Claim("UserName",luser.UserName),
                        new Claim("NameSurname",luser.NameSurname),
                        new Claim("UserID",luser.ID.ToString()),
                        new Claim("Phone",luser.Phone.ToString()),
                        new Claim("Role",luser.Role.ToString())
                    };
                    ClaimsIdentity identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
                    ClaimsPrincipal principal = new ClaimsPrincipal(identity);
                    await HttpContext.SignInAsync(principal);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    ViewBag.CssClassName = "danger"; ;
                    ViewBag.Message = "Şifrenizi Hatalı Girdiniz!";
                    return View(new User());
                }
            }
            else
            {
                ViewBag.CssClassName = "danger"; ;
                ViewBag.Message = "Kullanıcı Bulunamadı!";
                return View(new User());
            }
        }

Oturum açtığımıza göre, navbarda otrum açtıysa  Çıkış butonu olsun diğer butonlar gizlensin, ve oturum açan kişinin ismi navbarda görünsün..

Bunun için Layout.cs dosyasına gidelim.. Giriş Yap ve Üye ol butonlarının olduğu yeri güncelleyelim...

 @if (User.Identity.IsAuthenticated)
    {
  var user = (System.Security.Claims.ClaimsIdentity)User.Identity;
   <li class="dropdown">
      <a href="#"><span class="text-right"> @user.FindFirst("NameSurname").Value </span> 
        <i class="bi bi-chevron-down dropdown-indicator"> </i></a>
     <ul>
       <li class="dropdown">
         <a href="#"><span>Hesabım</span>
             <i class="bi bi-chevron-down dropdown-indicator"></i>
           </a>
   <ul>
   <li><a href="#">Şifre Güncelleme</a></li>
 <li><a href="#">Profil Güncelleme</a></li>
   </ul>
</li>
<li><a href="#">Pompa Satış İşlemlerim</a></li>
  <li><a href="#">Kasa Hesabım</a></li>
 </ul>
 </li>
                        
 }
else
{
                 
<li><a class="get-a-quote" asp-controller="User" asp-action="SignIn">Giriş Yap</a></li>
<li><a class="get-a-quote" asp-controller="User" asp-action="SignUp">Üye Ol</a></li>
}

Oturum açalım admin şifre:12345





Bir sonraki yazıda  Çıkış işlemini yapalım..


Hiç yorum yok: