ASP NET CORE RAZOR PAGE BAKIM TEKNİK SERVİS PROJESİ DERS 015 REGISTER KULLANICI ARAYÜZÜ

Uygulamamızda ApplicationUser classımıza birkaç alan daha eklemiştik. Şimdi ASP.Net Core Identity tarafından otomatik olarak eklenmiş Register sayfasının arayüzünü değiştirelim. Bu razor page sayfamız konum olarak projemizde Areas>Pages>Account altında yer almakta.

Dersin video versiyonunu da izlemenizi tavsiye ederim.

Burada Register.cshtml ve Register.cshtml.cs açalım. Şimdi buradaki mevcut dokümanların halini inclediğimizde asp .net core identtiy tarafından tanımlanmış olan Email, Şifre, Şifre doğrulama alanları kullanıcı arayüz tarafında ekli. Aynı zamanda page model classında yani codebehind tarafında da buna ilişkin olarka ilgili tanımlamalar yapılmış, inputmodel oluşturulmuş ve bu inputmodel içinde mevcut propertyler eklenmiş.

Biz ne yaptık, ApplicationUser classımıza biraz daha alan ekledik. Şimdi bu eklenen alanları öncelikl buradaki page model’e yansıtmamız lazım. Akabinde son kullanıcı arayüz sayfasını da güncelleyeceğiz. Dolayısı ile ApplicationUser classımda yer alan property kopyalarını alıyor ve Register.cshtml.cs page model classımıza ekliyorum. İlgili attribute eklemelerimi de yapıyorum. Ek olarak ben TelefonNumarasi propert’ini ApplicationUser alanımda eklemedim. Çünkü buna genk gelen bir alan vardı. Ancak şöyle bir durum var, ben yeri geldiğinde daha net anlaşılsın diye Türkçe gittiğim için iligli tabloda alanın PhoneNumber olarak tanımlanma hususunu atladım. Bu alanda bana kayıt işlemi esnasında lazım olacak, dolayısı ile burayı şimdi İngilizce olarak kullanacağım. ApplicationUser classımda PhoneNumber property eklemedim, çünkü bu zaten tablomda var. Ama bunu kullanacağım için PageModel tarafında ekliyorum.

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Text.Encodings.Web;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.UI.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.WebUtilities;
using Microsoft.Extensions.Logging;

namespace GursoyCNCBakim.Areas.Identity.Pages.Account
{
    [AllowAnonymous]
    public class RegisterModel : PageModel
    {
        private readonly SignInManager< IdentityUser > _signInManager;
        private readonly UserManager< IdentityUser > _userManager;
        private readonly ILogger< RegisterModel > _logger;
        private readonly IEmailSender _emailSender;

        public RegisterModel(
            UserManager< IdentityUser > userManager,
            SignInManager< IdentityUser > signInManager,
            ILogger< RegisterModel > logger,
            IEmailSender emailSender)
        {
            _userManager = userManager;
            _signInManager = signInManager;
            _logger = logger;
            _emailSender = emailSender;
        }

        [BindProperty]
        public InputModel Input { get; set; }

        public string ReturnUrl { get; set; }

        public IList< AuthenticationScheme > ExternalLogins { get; set; }

        public class InputModel
        {
            [Required]
            [EmailAddress]
            [Display(Name = "Email")]
            public string Email { get; set; }

            [Required]
            [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
            [DataType(DataType.Password)]
            [Display(Name = "Password")]
            public string Password { get; set; }

            [DataType(DataType.Password)]
            [Display(Name = "Confirm password")]
            [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
            public string ConfirmPassword { get; set; }

            [Required]
            public string AdSoyad { get; set; }
            public string Adres { get; set; }
            public string Sehir { get; set; }
            public string PostaKodu { get; set; }

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

        }

        public async Task OnGetAsync(string returnUrl = null)
        {
            ReturnUrl = returnUrl;
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
        }

        public async Task< IActionResult > OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
            if (ModelState.IsValid)
            {
                var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
                var result = await _userManager.CreateAsync(user, Input.Password);
                if (result.Succeeded)
                {
                    _logger.LogInformation("User created a new account with password.");

                    var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                    code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                    var callbackUrl = Url.Page(
                        "/Account/ConfirmEmail",
                        pageHandler: null,
                        values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                        protocol: Request.Scheme);

                    await _emailSender.SendEmailAsync(Input.Email, "Confirm your email",
                        $"Please confirm your account by clicking here.");

                    if (_userManager.Options.SignIn.RequireConfirmedAccount)
                    {
                        return RedirectToPage("RegisterConfirmation", new { email = Input.Email, returnUrl = returnUrl });
                    }
                    else
                    {
                        await _signInManager.SignInAsync(user, isPersistent: false);
                        return LocalRedirect(returnUrl);
                    }
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return Page();
        }
    }
}


Şimdi bu page modelin son kullanıcı arayüzü tarafına geçelim ve kodlarımızı düzenleyelim.

@page
@model RegisterModel
@{
    ViewData["Title"] = "Register";
}

Yeni Hesap Oluştur

Ad - Soyad: @**@
E-Posta: @**@
Telefon No: @**@
Adres: @**@
Şehir: @**@
Posta Kodu: @**@
Şifre: @**@
Şifre Tekrar: @**@
@section Scripts { < partial name="_ValidationScriptsPartial" /> }

Şimdilik bu kadar, dersin video versiyonunda daha fazla detay bulabilirsiniz. Bir sonraki derste görüşmek üzere.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir