﻿
{"id":12010,"date":"2019-09-06T16:14:29","date_gmt":"2019-09-06T16:14:29","guid":{"rendered":"https:\/\/www.gencayyildiz.com\/blog\/?p=12010"},"modified":"2019-09-06T16:14:29","modified_gmt":"2019-09-06T16:14:29","slug":"asp-net-core-identity-uye-bilgileri-guncelleme-xii","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-uye-bilgileri-guncelleme-xii\/","title":{"rendered":"Asp.NET Core Identity &#8211; \u00dcye Bilgileri G\u00fcncelleme &#8211; XII"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Merhaba,<\/p>\n<p><a href=\"https:\/\/www.gencayyildiz.com\/blog\/asp-net-core-identity-yazi-dizisi\/\" rel=\"noopener noreferrer\" target=\"_blank\">Asp.NET Core Identity yaz\u0131 dizisinin<\/a> 11. makalesinde, kay\u0131t i\u015flemi ger\u00e7ekle\u015fen ve Cookie bazl\u0131 do\u011frulama neticesinde o an oturum a\u00e7an kullan\u0131c\u0131n\u0131n bilgilerini g\u00fcncellemeyi ve bunun yan\u0131nda bilgileri g\u00fcncellenen kullan\u0131c\u0131y\u0131 oturumdan d\u00fc\u015f\u00fcrmeksizin yeni bir cookie olu\u015fturman\u0131n nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 inceleyece\u011fiz.<\/p>\n<p>\u0130lk olarak kullan\u0131c\u0131 bilgileri g\u00fcncellendi\u011fi taktirde o an mevcut oturumdaki kullan\u0131c\u0131y\u0131 g\u00fcncelleyebilmek i\u00e7in yeni cookie de\u011ferlerinin nas\u0131l olu\u015fturulaca\u011f\u0131n\u0131 ve kullan\u0131c\u0131ya hi\u00e7 sezdirmeden \u00e7\u0131k\u0131\u015f ve giri\u015f i\u015flemlerinin nas\u0131l yap\u0131laca\u011f\u0131n\u0131 programatik olarak inceleyelim.<\/p>\n<h3>Kullan\u0131c\u0131ya Kod \u0130le Yeni Cookie Olu\u015fturma<\/h3>\n<p>Yap\u0131sal olarak bu i\u015flem i\u00e7in ilk olarak kullan\u0131c\u0131n\u0131n &#8220;SecurityStamp&#8221; de\u011ferini g\u00fcncellememiz ve ard\u0131ndan kullan\u0131c\u0131ya \u00e7\u0131k\u0131\u015f yapt\u0131r\u0131p, tekrar giri\u015f yapt\u0131rmam\u0131z yeterli olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);\r\n.\r\n.\r\n.\r\n                await _userManager.UpdateSecurityStampAsync(user);\r\n                await _signInManager.SignOutAsync();\r\n                await _signInManager.SignInAsync(user, true);\r\n.\r\n.\r\n.\r\n<\/pre>\n<p>\u015eimdi bu manevra e\u015fli\u011finde kullan\u0131c\u0131n\u0131n kritik bilgilerini de\u011fi\u015ftirebiliriz. Gelin buna \u00fcye bilgilerini de\u011fi\u015ftirerek ba\u015flayal\u0131m.<\/p>\n<h3>\u00dcye Bilgilerini De\u011fi\u015ftirme<\/h3>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        readonly UserManager&lt;AppUser&gt; _userManager;\r\n        readonly SignInManager&lt;AppUser&gt; _signInManager;\r\n        public UserController(UserManager&lt;AppUser&gt; userManager, SignInManager&lt;AppUser&gt; signInManager)\r\n        {\r\n            _userManager = userManager;\r\n            _signInManager = signInManager;\r\n        }\r\n        .\r\n        .\r\n        .\r\n        &#x5B;HttpPost]\r\n        public async Task&lt;IActionResult&gt; EditProfile(UserDetailViewModel model)\r\n        {\r\n            if (ModelState.IsValid)\r\n            {\r\n                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);\r\n                user.PhoneNumber = model.PhoneNumber;\r\n                IdentityResult result = await _userManager.UpdateAsync(user);\r\n                if (!result.Succeeded)\r\n                {\r\n                    result.Errors.ToList().ForEach(e =&gt; ModelState.AddModelError(e.Code, e.Description));\r\n                    return View(model);\r\n                }\r\n                await _userManager.UpdateSecurityStampAsync(user);\r\n                await _signInManager.SignOutAsync();\r\n                await _signInManager.SignInAsync(user, true);\r\n            }\r\n            return RedirectToAction(&quot;Index&quot;);\r\n        }\r\n<\/pre>\n<p>G\u00f6r\u00fcld\u00fc\u011f\u00fc \u00fczere \u00fcye bilgilerini de\u011fi\u015ftirebilmek i\u00e7in &#8220;UserManager&#8221; nesnesi arac\u0131l\u0131\u011f\u0131yla elde edilen \u00fcyenin t\u00fcm bilgilerini post neticesinde gelen viewmodel&#8217;de ki verilerle de\u011fi\u015ftiriyoruz&#8230; Ard\u0131ndan 18. sat\u0131rda oldu\u011fu gibi UpdateAsync metoduyla kullan\u0131c\u0131n\u0131n son g\u00fcncel bilgilerini veritaban\u0131na yans\u0131t\u0131yoruz. 24 ile 26. sat\u0131r aral\u0131\u011f\u0131na dikkat ederseniz e\u011fer yap\u0131lan veritaban\u0131ndaki kritik de\u011fi\u015fikliklerden dolay\u0131 kullan\u0131c\u0131 oturumunu d\u00fc\u015f\u00fcr\u00fcp yeniden a\u00e7\u0131yoruz.<\/p>\n<p>Benzer olarak \u00fcyenin \u015fifresini de\u011fi\u015ftirebilmeyi inceleyelim&#8230;<\/p>\n<h3>\u00dcye \u015eifresini De\u011fi\u015ftirme<\/h3>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        readonly UserManager&lt;AppUser&gt; _userManager;\r\n        readonly SignInManager&lt;AppUser&gt; _signInManager;\r\n        public UserController(UserManager&lt;AppUser&gt; userManager, SignInManager&lt;AppUser&gt; signInManager)\r\n        {\r\n            _userManager = userManager;\r\n            _signInManager = signInManager;\r\n        }\r\n        .\r\n        .\r\n        .\r\n        &#x5B;HttpPost]\r\n        public async Task&lt;IActionResult&gt; EditPassword(EditPasswordViewModel model)\r\n        {\r\n            if (ModelState.IsValid)\r\n            {\r\n                AppUser user = await _userManager.FindByNameAsync(User.Identity.Name);\r\n                if (await _userManager.CheckPasswordAsync(user, model.OldPassword))\r\n                {\r\n                    IdentityResult result = await _userManager.ChangePasswordAsync(user, model.OldPassword, model.NewPassword);\r\n                    if (!result.Succeeded)\r\n                    {\r\n                        result.Errors.ToList().ForEach(e =&gt; ModelState.AddModelError(e.Code, e.Description));\r\n                        return View(model);\r\n                    }\r\n                    await _userManager.UpdateSecurityStampAsync(user);\r\n                    await _signInManager.SignOutAsync();\r\n                    await _signInManager.SignInAsync(user, true);\r\n                }\r\n            }\r\n            return RedirectToAction(&quot;Index&quot;);\r\n        }\r\n<\/pre>\n<p>Yukar\u0131daki kod blo\u011funu incelerseniz e\u011fer 17. sat\u0131rda &#8220;CheckPasswordAsync&#8221; metodu ile kullan\u0131c\u0131dan al\u0131nan eski \u015fifre do\u011frulanmakta ve 19. sat\u0131rda ise &#8220;ChangePasswordAsync&#8221; metodu ile eski \u015fifre yenisiyle de\u011fi\u015ftirilerek g\u00fcncellenmektedir. Devam\u0131nda ise yeniden oturuma dair gir \u00e7\u0131k yap\u0131larak kullan\u0131c\u0131ya dair nesneyi g\u00fcncel haliyle tazeliyoruz.<\/p>\n<p>B\u00f6ylece bir \u00fcyenin bilgilerini de\u011fi\u015ftirmeyi ve yap\u0131lan de\u011fi\u015fiklikler neticesinde \u00fcyenin yeniden oturum a\u00e7mas\u0131na gerek g\u00f6rmeksizin oturumunu tazelemeyi g\u00f6rm\u00fc\u015f olduk. Sonraki i\u00e7eri\u011fimizde oturum a\u00e7an \u00fcyenin \u00e7\u0131k\u0131\u015f i\u015flemlerine k\u0131saca de\u011finece\u011fiz. O halde \u015fimdilik g\u00f6r\u00fc\u015fmek \u00fczere&#8230;<\/p>\n<p>\u0130lgilenenlerin faydalanmas\u0131 dile\u011fiyle&#8230;<br \/>\n\u0130yi \u00e7al\u0131\u015fmalar&#8230;<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Merhaba, Asp.NET Core Identity yaz\u0131 dizisinin 11. makalesinde, kay\u0131t i\u015flemi ger\u00e7ekle\u015fen ve Cookie bazl\u0131 do\u011frulama neticesinde o an oturum a\u00e7an kullan\u0131c\u0131n\u0131n bilgilerini g\u00fcncellemeyi ve bunun yan\u0131nda bilgileri g\u00fcncellenen kullan\u0131c\u0131y\u0131 oturumdan d\u00fc\u015f\u00fcrmeksizin yeni bir cookie&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":11583,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2668,2656,2811,2832,2898],"tags":[100,2952,3008],"class_list":["post-12010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-asp-net-core-2","category-asp-net-core-2-mvc","category-asp-net-core-2-1","category-asp-net-core-2-2","category-asp-net-core-3-0","tag-identity","tag-asp-net-core-identity","tag-asp-net-core-identity-uye-bilgileri"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=12010"}],"version-history":[{"count":13,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12010\/revisions"}],"predecessor-version":[{"id":12025,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/12010\/revisions\/12025"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media\/11583"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=12010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=12010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=12010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}