c# Web

Öğrencilere Ait Performans ve Uygulama Notlarının Girildiği Core Mvc Projesi Tasarlama7

Kayıt ol (Register) işlemini ekleyelim. Öncelikle giriş formunu güncelleyelim.

Login Sayfasını Bootstrap ile Düzenleme

Aşağıdaki gibi Views/Account/Login.cshtml dosyasını güncelle:

@model SchoolManagement.Models.LoginViewModel

<div class="container d-flex justify-content-center align-items-center" style="min-height: 100vh; margin-top: -70px;">
    <div class="card shadow p-4" style="width: 400px;">
        <h2 class="text-center mb-4">Giriş Yap</h2>
        <form asp-action="Login" method="post">
            <div class="mb-3">
                <label for="Username" class="form-label">Kullanıcı Adı</label>
                <input type="text" id="Username" name="Username" class="form-control" required />
            </div>
            <div class="mb-3">
                <label for="Password" class="form-label">Şifre</label>
                <input type="password" id="Password" name="Password" class="form-control" required />
            </div>
            @*             <div class="form-check mb-3">
                <input asp-for="RememberMe" class="form-check-input" />
                <label asp-for="RememberMe" class="form-check-label">Beni Hatırla</label>
            </div>
 *@           
            @if (!ViewData.ModelState.IsValid)
            {
                <div class="alert alert-danger">
                    <ul>
                        @foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
                        {
                            <li>@error.ErrorMessage</li>
                        }
                    </ul>
                </div>
            }
            <button type="submit" class="btn btn-primary w-100">Giriş Yap</button>
            <div class="text-center mt-3">
                <a asp-action="Register" asp-controller="Account">Hesabınız yok mu? Kayıt olun</a>
            </div>
        </form>
    </div>
</div>

Kayıt Ol Sayfası (Register)

Şimdi yeni bir kullanıcı kayıt edebileceğimiz Register sayfasını ekleyelim.

Register ViewModel (Models/RegisterViewModel.cs)

using System.ComponentModel.DataAnnotations;

namespace SchoolManagement.Models
{
    public class RegisterViewModel
    {
        [Required]
        public string Username { get; set; }

        [Required]
        [EmailAddress]
        public string Email { get; set; }

        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }

        [Required]
        [Compare("Password", ErrorMessage = "Şifreler uyuşmuyor.")]
        public string ConfirmPassword { get; set; }

        [Required]
        public string Adi { get; set; }

        [Required]
        public string Soyadi { get; set; }

        [Required]
        public string Role { get; set; } // Kullanıcı rolü: Admin, Teacher, Student
    }
}

AccountController'a Register Metodu Ekle Controllers/AccountController.cs içinde Register metotlarını ekleyelim.

// Kayıt Sayfası
[HttpGet]
public IActionResult Register()
{
    return View();
}

// Kayıt İşlemi
[HttpPost]
public async Task<IActionResult> Register(RegisterViewModel model)
{
    if (ModelState.IsValid)
    {
        // Transaction başlatıyoruz
        using (var transaction = await _context.Database.BeginTransactionAsync())
        {
            try
            {
                // Email kontrolü
                var existingEmail = await _userManager.Users.AnyAsync(u => u.Email == model.Email);
                if (existingEmail)
                {
                    ModelState.AddModelError("Email", "Bu e-posta adresi zaten kayıtlı.");
                    return View(model); // Email zaten varsa hata göster
                }

                // Şifre kontrolü
                var users = await _userManager.Users.ToListAsync(); // Kullanıcıları çekiyoruz
                var passwordHasher = new PasswordHasher<ApplicationUser>();

                foreach (var user in users)
                {
                    var verificationResult = passwordHasher.VerifyHashedPassword(user, user.PasswordHash, model.Password);

                    // Eğer şifre aynıysa, hata mesajı göster
                    if (verificationResult == PasswordVerificationResult.Success)
                    {
                        ModelState.AddModelError("Password", "Bu şifreyle daha önce bir hesap kaydedilmiştir.");
                        return View(model); // Şifre aynıysa hata göster
                    }
                }

                if (model.Password != model.ConfirmPassword)
                {
                    ModelState.AddModelError("ConfirmPassword", "Şifreler uyuşmuyor.");
                    return View(model);
                }

                // Kullanıcıyı Identity tablosuna ekleyelim
                var newUser = new ApplicationUser { UserName = model.Username, Email = model.Email };
                var result = await _userManager.CreateAsync(newUser, model.Password);

                if (result.Succeeded)
                {
                    // Kullanıcıyı bulalım
                    var createdUser = await _userManager.FindByIdAsync(newUser.Id);

                    // Şifre hash'ini alalım
                    var hashedPassword = createdUser?.PasswordHash;

                    // Rol ataması yapalım
                    if (model.Role == "Admin")
                    {
                        await _userManager.AddToRoleAsync(newUser, "Admin");
                        var admin = new Yonetici
                        {
                            KullaniciAdi = model.Username,
                            EmailAdresi = model.Email,
                            Adi = model.Adi,
                            Soyadi = model.Soyadi,
                            Rol = model.Role,
                            Sifre = hashedPassword ?? "default", // Eğer null ise boş string kullan
                            Durum = 2,
                            ResimYolu = "images/default.jpg"
                        };
                        _context.Yoneticiler.Add(admin);
                    }
                    else if (model.Role == "Teacher")
                    {
                        await _userManager.AddToRoleAsync(newUser, "Teacher");
                        var teacher = new Ogretmen
                        {
                            KullaniciAdi = model.Username,
                            EmailAdresi = model.Email,
                            Adi = model.Adi,
                            Soyadi = model.Soyadi,
                            Sifre = hashedPassword ?? "default",
                            Rol = model.Role,
                            Durum = 2,
                            ResimYolu = "images/default.jpg"
                        };
                        _context.Ogretmenler.Add(teacher);
                    }
                    else if (model.Role == "Student")
                    {
                        await _userManager.AddToRoleAsync(newUser, "Student");
                        var student = new Ogrenci
                        {
                            KullaniciAdi = model.Username,
                            EmailAdresi = model.Email,
                            Adi = model.Adi,
                            Soyadi = model.Soyadi,
                            Sifre = hashedPassword ?? "default",
                            Rol = model.Role,
                            Durum = 2,
                            ResimYolu = "images/default.jpg",
                            Numara = "0000",
                            WebAdresi = "https://www.example.com"
                        };
                        _context.Ogrenciler.Add(student);
                    }

                    await _context.SaveChangesAsync();
                    await transaction.CommitAsync();
                    await _signInManager.SignInAsync(newUser, isPersistent: false);

                    return RedirectToAction("Login", "Account");
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Kullanıcı kaydı sırasında hata oluştu.");
                    await transaction.RollbackAsync();
                }
            }
            catch (Exception ex)
            {
                await transaction.RollbackAsync();
                ModelState.AddModelError(string.Empty, $"Bir hata oluştu: {ex.Message}");
            }
        }
    }

    // Model geçerli değilse, formu ve hataları geri gönderiyoruz
    return View(model);
}

Register Sayfası (Views/Account/Register.cshtml)

@model SchoolManagement.Models.RegisterViewModel

<div class="container d-flex justify-content-center align-items-center" style="min-height: 100vh;">
    <div class="card shadow p-4" style="width: 400px;">
        <h2 class="text-center mb-4">Kayıt Ol</h2>
        <form asp-action="Register" method="post">
            <div class="mb-3">
                <label asp-for="Username" class="form-label">Kullanıcı Adı</label>
                <input asp-for="Username" class="form-control" required />
                <span asp-validation-for="Username" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="Email" class="form-label">E-posta</label>
                <input asp-for="Email" class="form-control" required />
                <span asp-validation-for="Email" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="Password" class="form-label">Şifre</label>
                <input asp-for="Password" type="password" class="form-control" required />
                <span asp-validation-for="Password" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="ConfirmPassword" class="form-label">Şifre Tekrarı</label>
                <input asp-for="ConfirmPassword" type="password" class="form-control" required />
                <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="Adi" class="form-label">Adı</label>
                <input asp-for="Adi" class="form-control" required />
                <span asp-validation-for="Adi" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="Soyadi" class="form-label">Soyadı</label>
                <input asp-for="Soyadi" class="form-control" required />
                <span asp-validation-for="Soyadi" class="text-danger"></span>
            </div>
            <div class="mb-3">
                <label asp-for="Role" class="form-label">Rol Seçin</label>
                <select asp-for="Role" class="form-control" required>
                    <option value="Admin">Yönetici</option>
                    <option value="Teacher">Öğretmen</option>
                    <option value="Student">Öğrenci</option>
                </select>
                <span asp-validation-for="Role" class="text-danger"></span>
            </div>

            @if (!ViewData.ModelState.IsValid)
            {
                <div class="alert alert-danger">
                    <ul>
                        @foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
                        {
                            <li>@error.ErrorMessage</li>
                        }
                    </ul>
                </div>
            }

            <button type="submit" class="btn btn-primary w-100">Kayıt Ol</button>
        </form>
    </div>
</div>

Kayıt işlemlerini tamamladık. Kullaınıcıların web sayfasına erişim izinlerine göre kayıtları tablolarda saklandı.


İlgili Makaleler
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem İkinci Yazılı Çalışma Soruları
2020 TYT Matematik Ortakatlı Kuralıyla İlgili Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama1
Web Tabanlı Uygulama Geliştirme Dersi İkinci Dönem Birinci Yazılı Çalışma Soruları
Visual Studio 2022 Programında Asp.Net Web Application Şablonu Görünmüyor Hatasını Düzeltme
Core Mvc Projesinde Tuple Nesneleri Post Etme ve Yakalama İşlemleri
Seri Port Yardımıyla Arduino Devresine Bağlanıp Ledleri Asp.Net Web Uygulamasından Yakıp Söndürme
Sitenin Alexa Dünya Sıralamasını Kodlarla Öğrenme
Personele Ait Boy ve Kilo Bilgilerine Göre İdeal Kiloyu Bulan Uygulamayı Asp.Net İle Yapınız
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama4
Bir Otobüs Firmasına Ait Bilet Satış İşlemlerini Class(Sınıf) Tanımlayarak Yapan c# Form Uygulaması
Asp.Net Uygulamasında Manual Olarak JSON Oluşturma
Asp.Net Uygulamalarında Modal PopUp Oluşturma
Web Uygulamalarında SqLite Kullanımı
Asp.Net Uygulamalarında DataList (Veri Listeleme) Kontrolü
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama2
C# Uygulamasında Miladi Takvimi Hicri Takvime, Hicri Takvimi Miladi Takvime Dönüştürme
RadioButton ile Cinsiyet Bilgisini Alan Asp.Net c# Uygulaması
Core Mvc Projesinde SqlServer Kullanarak Üye Takibi Yapan Web Projesini Tasarlama3
2022 TYT Matematik Onbirinci Sorunun Çözümünü c# Diliyle Web Form Sayfasında Kodlama

Yorum Ekle
   
Kötü İyi