{"id":109806,"date":"2025-05-20T16:27:17","date_gmt":"2025-05-20T11:57:17","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/"},"modified":"2025-05-20T16:27:17","modified_gmt":"2025-05-20T11:57:17","slug":"how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/","title":{"rendered":"\u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc ASP.NET \u0631\u0627 \u0628\u0627 EF Core \u0628\u0631\u0627\u06cc \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f"},"content":{"rendered":"<div data-article-id=\"2505677\" id=\"article-body\">\n<p>\u0627\u0645\u0646\u06cc\u062a \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u062a\u0631\u06cc\u0646 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.<br \/>\u062f\u0631\u06a9 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u062b\u0628\u0627\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9 \u0645\u0627\u0646\u0646\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0648 \u0646\u0634\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n<p><strong>\u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc Asp.net<\/strong> \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u0634\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u060c \u0646\u0642\u0634 \u0647\u0627 \u060c \u0627\u062f\u0639\u0627\u0647\u0627 \u0648 \u0627\u0646\u062c\u0627\u0645 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0631\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0648\u0628 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<br \/>\u0647\u0648\u06cc\u062a \u0631\u0627\u0647 \u062d\u0644 \u0647\u0627\u06cc \u0622\u0645\u0627\u062f\u0647 \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0648 API \u0631\u0627 \u0627\u0632 \u062c\u0639\u0628\u0647 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0627\u0645\u0627 \u0627\u063a\u0644\u0628 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u062a\u0646\u0638\u06cc\u0645\u0627\u062a\u06cc \u0631\u0627 \u0645\u062a\u0646\u0627\u0633\u0628 \u0628\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627 \u06cc\u0627 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc \u062e\u0627\u0635 \u062e\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.<\/p>\n<p>\u0627\u0645\u0631\u0648\u0632 \u0645\u06cc \u062e\u0648\u0627\u0647\u0645 \u0631\u0648\u06cc\u06a9\u0631\u062f\u0647\u0627\u06cc \u0639\u0645\u0644\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc \u0634\u062e\u0635\u06cc \u0633\u0627\u0632\u06cc \u0647\u0648\u06cc\u062a ASP.NET \u0628\u0647 \u0645\u0631\u062d\u0644\u0647 \u0628\u0647 \u0645\u0631\u062d\u0644\u0647 \u0646\u0634\u0627\u0646 \u062f\u0647\u0645.<\/p>\n<p>\u0645\u0627 \u06a9\u0627\u0648\u0634 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f:<\/p>\n<ul>\n<li>\u0646\u062d\u0648\u0647 \u062a\u0637\u0628\u06cc\u0642 \u062c\u062f\u0627\u0648\u0644 \u0647\u0648\u06cc\u062a \u062f\u0627\u062e\u0644\u06cc \u0628\u0627 \u0637\u0631\u062d \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f<\/li>\n<li>\u0646\u062d\u0648\u0647 \u062b\u0628\u062a \u0648 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627\u06cc JWT<\/li>\n<li>\u0646\u062d\u0648\u0647 \u0628\u0647 \u0631\u0648\u0632\u0631\u0633\u0627\u0646\u06cc \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0647\u0648\u06cc\u062a<\/li>\n<li>\u0646\u062d\u0648\u0647 \u0628\u0630\u0631 \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a.<\/li>\n<\/ul>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0634\u06cc\u0631\u062c\u0647 \u0628\u0632\u0646\u06cc\u0645!<\/p>\n<blockquote>\n<p><strong><em>\u062f\u0631 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0645\u0646: antondevtips.com \u0645\u0646 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627\u06cc .NET \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0645.<\/em><\/strong><br \/><strong><em>\u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0645\u0647\u0627\u0631\u062a \u0647\u0627\u06cc \u062f\u0627\u062a \u0646\u062a \u062e\u0648\u062f \u062f\u0631 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0634\u0648\u06cc\u062f.<\/em><\/strong><br \/><strong><em>\u06a9\u062f \u0645\u0646\u0628\u0639 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0631\u0627\u06cc\u06af\u0627\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/em><\/strong><\/p>\n<\/blockquote>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_86 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"\u062a\u063a\u06cc\u06cc\u0631 \u0648\u0636\u0639\u06cc\u062a \u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/#%D8%B4%D8%B1%D9%88%D8%B9_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA_ASPNET\" >\u0634\u0631\u0648\u0639 \u0628\u0627 \u0647\u0648\u06cc\u062a ASP.NET<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/#%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%87%D9%88%DB%8C%D8%AA_ASPNET_%D8%A8%D8%A7_EF_Core\" >\u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0627\u0632\u06cc \u0647\u0648\u06cc\u062a ASP.NET \u0628\u0627 EF Core<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/#%D8%AB%D8%A8%D8%AA_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA\" >\u062b\u0628\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0647\u0648\u06cc\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/#%D9%86%D8%AD%D9%88%D9%87_%D9%88%D8%B1%D9%88%D8%AF_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA\" >\u0646\u062d\u0648\u0647 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0647\u0648\u06cc\u062a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/how-to-customize-aspnet-core-identity-with-ef-core-for-your-project-needs-3nlf\/#%D9%86%D8%AD%D9%88%D9%87_%D8%A8%D8%B0%D8%B1_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D9%87%D9%88%DB%8C%D8%AA_%D9%86%D9%82%D8%B4_%D9%87%D8%A7_%D9%88_%D8%A7%D8%AF%D8%B9%D8%A7%D9%87%D8%A7_%D8%B1%D8%A7_%D8%A2%D8%BA%D8%A7%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\" >\u0646\u062d\u0648\u0647 \u0628\u0630\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0647\u0648\u06cc\u062a: \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B4%D8%B1%D9%88%D8%B9_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA_ASPNET\"><\/span>\n<p>  \u0634\u0631\u0648\u0639 \u0628\u0627 \u0647\u0648\u06cc\u062a ASP.NET<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><strong>\u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc Asp.net<\/strong> \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc\u06cc \u0627\u0633\u062a \u06a9\u0647 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0631\u0627 \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0627\u0635\u0644\u06cc ASP.NET \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f.<br \/>\u0627\u06cc\u0646 \u0648\u0638\u0627\u06cc\u0641 \u0645\u0627\u0646\u0646\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062c\u062f\u06cc\u062f \u060c \u0639\u0628\u0648\u0631 \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u060c \u0627\u0639\u062a\u0628\u0627\u0631 \u0627\u0639\u062a\u0628\u0627\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u0645\u062f\u06cc\u0631\u06cc\u062a \u0646\u0642\u0634 \u0647\u0627 \u06cc\u0627 \u0627\u062f\u0639\u0627\u0647\u0627 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0628\u0633\u062a\u0647 \u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0628\u0647 \u067e\u0631\u0648\u0698\u0647 \u062e\u0648\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u0628\u0627 \u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc ASP.NET \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore\ndotnet add package Microsoft.AspNetCore.Authentication.JwtBearer\ndotnet add package Microsoft.EntityFrameworkCore\ndotnet add package Npgsql.EntityFrameworkCore.PostgreSQL\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0647\u0648\u06cc\u062a \u067e\u06cc\u0634 \u0641\u0631\u0636 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"n\">Services<\/span><span class=\"p\">.<\/span><span class=\"n\">AddDefaultIdentity<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">IdentityUser<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">options<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"p\">{})<\/span>\n    <span class=\"p\">.<\/span><span class=\"n\">AddEntityFrameworkStores<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">ApplicationDbContext<\/span><span class=\"p\">&gt;();<\/span>\n\n<span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"n\">Services<\/span><span class=\"p\">.<\/span><span class=\"n\">Configure<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">IdentityOptions<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">options<\/span> <span class=\"p\">=&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"c1\">\/\/ Password settings.<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireDigit<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireLowercase<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireNonAlphanumeric<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireUppercase<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequiredLength<\/span> <span class=\"p\">=<\/span> <span class=\"m\">6<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequiredUniqueChars<\/span> <span class=\"p\">=<\/span> <span class=\"m\">1<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">\/\/ Lockout settings.<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Lockout<\/span><span class=\"p\">.<\/span><span class=\"n\">DefaultLockoutTimeSpan<\/span> <span class=\"p\">=<\/span> <span class=\"n\">TimeSpan<\/span><span class=\"p\">.<\/span><span class=\"nf\">FromMinutes<\/span><span class=\"p\">(<\/span><span class=\"m\">5<\/span><span class=\"p\">);<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Lockout<\/span><span class=\"p\">.<\/span><span class=\"n\">MaxFailedAccessAttempts<\/span> <span class=\"p\">=<\/span> <span class=\"m\">5<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Lockout<\/span><span class=\"p\">.<\/span><span class=\"n\">AllowedForNewUsers<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"c1\">\/\/ User settings.<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">.<\/span><span class=\"n\">AllowedUserNameCharacters<\/span> <span class=\"p\">=<\/span>\n    <span class=\"s\">\"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+\"<\/span><span class=\"p\">;<\/span>\n    <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireUniqueEmail<\/span> <span class=\"p\">=<\/span> <span class=\"k\">false<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0644\u06cc\u0633\u062a \u0645\u0648\u062c\u0648\u062f\u0627\u062a \u0645\u0648\u062c\u0648\u062f \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u0647\u0648\u06cc\u062a \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f:<\/p>\n<ul>\n<li>\u06a9\u0627\u0631\u0628\u0631<\/li>\n<li>\u0646\u0642\u0634<\/li>\n<li>\u0627\u062f\u0639\u0627 \u06a9\u0631\u062f\u0646<\/li>\n<li>\u0627\u062f\u0639\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631<\/li>\n<li>\u0627\u0631\u0628\u0627\u0628<\/li>\n<li>\u0628\u0627\u0633\u0644\u0647<\/li>\n<li>\u0645\u062a\u0645\u0627\u06cc\u0632<\/li>\n<li>\u06a9\u0627\u0631\u06af\u0631\u062f\u0627\u0646<\/li>\n<\/ul>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644 \u060c \u062f\u0631 \u0628\u0633\u06cc\u0627\u0631\u06cc \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u06cc\u062c\u0627\u062f \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f:<\/p>\n<ul>\n<li>\u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 <code>User<\/code> \u0645\u0648\u062c\u0648\u062f\u06cc\u062a<\/li>\n<li>\u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 <code>Role<\/code> \u0645\u0648\u062c\u0648\u062f\u06cc\u062a<\/li>\n<li>\u06a9\u0627\u0631\u0628\u0631 \u0648 \u0646\u0642\u0634 \u06a9\u0648\u062f\u06a9 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u0631\u062c\u0639 <code>IdentityDbContext<\/code>\n<\/li>\n<li>\u0627\u0632 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627\u06cc JWT \u0628\u0647 \u062c\u0627\u06cc \u0646\u0634\u0627\u0646\u0647 \u0647\u0627\u06cc \u062a\u062d\u0645\u0644 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f (\u0628\u0644\u0647 \u060c \u0647\u0648\u06cc\u062a \u0647\u0633\u062a\u0647 ASP.NET \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 API \u0647\u0627\u06cc \u0648\u0628 \u0622\u0645\u0627\u062f\u0647 \u060c \u0646\u0634\u0627\u0646\u0647 \u0647\u0627\u06cc \u062a\u062d\u0645\u0644 \u0631\u0627 \u0628\u0631\u0645\u06cc \u06af\u0631\u062f\u0627\u0646\u062f)<\/li>\n<\/ul>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0637\u0631\u062d \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0647\u0648\u06cc\u062a \u0628\u0627 EF Core \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B3%D9%81%D8%A7%D8%B1%D8%B4%DB%8C_%D8%B3%D8%A7%D8%B2%DB%8C_%D9%87%D9%88%DB%8C%D8%AA_ASPNET_%D8%A8%D8%A7_EF_Core\"><\/span>\n<p>  \u0633\u0641\u0627\u0631\u0634\u06cc \u0633\u0627\u0632\u06cc \u0647\u0648\u06cc\u062a ASP.NET \u0628\u0627 EF Core<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u06cc\u06a9\u06cc \u0627\u0632 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0639\u0627\u0644\u06cc \u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc ASP.NET \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0634\u062e\u0627\u0635 \u0648 \u062c\u062f\u0627\u0648\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u0631\u0628\u0648\u0637\u0647 \u0631\u0627 \u0633\u0641\u0627\u0631\u0634\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0644\u0627\u0633 \u062e\u0648\u062f \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0627\u0632 <code>IdentityUser<\/code> \u0628\u0631\u0627\u06cc \u0627\u0641\u0632\u0648\u062f\u0646 \u0632\u0645\u06cc\u0646\u0647 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f (\u0646\u0627\u0645 FullName \u0648 JobTitle):<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">User<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUser<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">FullName<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">JobTitle<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0639\u062f \u0628\u0627\u06cc\u062f \u0627\u0632 <code>IdentityDbContext<\/code> \u0648 \u0646\u0648\u0639 \u06a9\u0644\u0627\u0633 \u06a9\u0627\u0631\u0628\u0631 \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0645\u0634\u062e\u0635 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">BooksDbContext<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityDbContext<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0637\u0648\u0631 \u0645\u0639\u0645\u0648\u0644 \u06cc\u06a9 \u0646\u0647\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0631 \u0633\u0627\u06cc\u0631 \u0646\u0647\u0627\u062f\u0647\u0627 \u0627\u0631\u062c\u0627\u0639 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">Author<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">required<\/span> <span class=\"n\">Guid<\/span> <span class=\"n\">Id<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">required<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">Name<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Book<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">Books<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[];<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"kt\">string<\/span><span class=\"p\">?<\/span> <span class=\"n\">UserId<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">User<\/span><span class=\"p\">?<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">AuthorConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Author<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Author<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"authors\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasKey<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"c1\">\/\/ ...<\/span>\n\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasOne<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">()<\/span>\n            <span class=\"p\">.<\/span><span class=\"n\">HasForeignKey<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Author<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">x<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u0645 <code>User<\/code> \u0646\u0647\u0627\u062f \u0628\u06cc\u0634\u062a\u0631 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0628\u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0647 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u060c \u0646\u0642\u0634 \u0647\u0627 \u060c \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0648 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627 \u0628\u0631\u0648\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">User<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUser<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserClaim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">Claims<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserRole<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">UserRoles<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserLogin<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">UserLogins<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserToken<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">UserTokens<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0627 \u0628\u0627\u06cc\u062f \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0631\u0627 \u0628\u0631\u0627\u06cc <code>User<\/code> \u0645\u0648\u062c\u0648\u062f\u06cc \u0628\u0631\u0627\u06cc \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f\u0646 \u0631\u0648\u0627\u0628\u0637:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"c1\">\/\/ Each User can have many UserClaims<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">Claims<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">uc<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">uc<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"c1\">\/\/ Each User can have many UserLogins<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">UserLogins<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">ul<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">ul<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"c1\">\/\/ Each User can have many UserTokens<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">UserTokens<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">ut<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">ut<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"c1\">\/\/ Each User can have many entries in the UserRole join table<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">UserRoles<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">User<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">ur<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">ur<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u062a\u0645\u0627\u0645 \u0631\u0648\u0627\u0628\u0637 \u0628\u06cc\u0646 \u0646\u0647\u0627\u062f\u0647\u0627\u06cc \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f \u060c \u0628\u0627\u06cc\u062f \u06a9\u0644\u0627\u0633 \u0647\u0627\u06cc \u062f\u06cc\u06af\u0631\u06cc \u0631\u0627 \u0646\u06cc\u0632 \u06af\u0633\u062a\u0631\u0634 \u062f\u0647\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">Role<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityRole<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserRole<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">UserRoles<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">ICollection<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">RoleClaim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">RoleClaims<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">RoleClaim<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityRoleClaim<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">Role<\/span> <span class=\"n\">Role<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserRole<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUserRole<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">User<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">Role<\/span> <span class=\"n\">Role<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserClaim<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUserClaim<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">User<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserLogin<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUserLogin<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">User<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserToken<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityUserToken<\/span><span class=\"p\">&lt;<\/span><span class=\"kt\">string<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"n\">User<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span> <span class=\"k\">get<\/span><span class=\"p\">;<\/span> <span class=\"k\">set<\/span><span class=\"p\">;<\/span> <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u0642\u0634\u0647 \u0628\u0631\u062f\u0627\u0631\u06cc \u0628\u0631\u0627\u06cc \u0627\u0634\u062e\u0627\u0635 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">RoleConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Role<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Role<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"roles\"<\/span><span class=\"p\">);<\/span>\n\n        <span class=\"c1\">\/\/ Each Role can have many entries in the UserRole join table<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">UserRoles<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">Role<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">ur<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">ur<\/span><span class=\"p\">.<\/span><span class=\"n\">RoleId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"c1\">\/\/ Each Role can have many associated RoleClaims<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasMany<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">RoleClaims<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">WithOne<\/span><span class=\"p\">(<\/span><span class=\"n\">e<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">e<\/span><span class=\"p\">.<\/span><span class=\"n\">Role<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">HasForeignKey<\/span><span class=\"p\">(<\/span><span class=\"n\">rc<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"n\">rc<\/span><span class=\"p\">.<\/span><span class=\"n\">RoleId<\/span><span class=\"p\">)<\/span>\n            <span class=\"p\">.<\/span><span class=\"nf\">IsRequired<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">RoleClaimConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">RoleClaim<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">RoleClaim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"role_claims\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserRoleConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserRole<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserRole<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">HasKey<\/span><span class=\"p\">(<\/span><span class=\"n\">x<\/span> <span class=\"p\">=&gt;<\/span> <span class=\"k\">new<\/span> <span class=\"p\">{<\/span> <span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"n\">UserId<\/span><span class=\"p\">,<\/span> <span class=\"n\">x<\/span><span class=\"p\">.<\/span><span class=\"n\">RoleId<\/span> <span class=\"p\">});<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserClaimConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserClaim<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserClaim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"user_claims\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserLoginConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserLogin<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserLogin<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"user_logins\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">UserTokenConfiguration<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IEntityTypeConfiguration<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserToken<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">void<\/span> <span class=\"nf\">Configure<\/span><span class=\"p\">(<\/span><span class=\"n\">EntityTypeBuilder<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserToken<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">builder<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">ToTable<\/span><span class=\"p\">(<\/span><span class=\"s\">\"user_tokens\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u062e\u06cc\u0644\u06cc \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f \u060c \u0627\u0645\u0627 \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0628\u0627\u0631 \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f \u0648 \u0633\u067e\u0633 \u062f\u0631 \u0647\u0631 \u067e\u0631\u0648\u0698\u0647 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<blockquote>\n<p>PS: \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u062f \u0645\u0646\u0628\u0639 \u06a9\u0627\u0645\u0644 \u0631\u0627 \u062f\u0631 \u0627\u0646\u062a\u0647\u0627\u06cc \u0645\u0642\u0627\u0644\u0647 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/p>\n<\/blockquote>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0622\u0645\u062f\u0647 \u0627\u0633\u062a \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 <code>BooksDbContext<\/code> \u062a\u063a\u06cc\u06cc\u0631\u0627\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">BooksDbContext<\/span> <span class=\"p\">:<\/span> <span class=\"n\">IdentityDbContext<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">,<\/span> <span class=\"n\">Role<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">UserClaim<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserRole<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserLogin<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RoleClaim<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserToken<\/span><span class=\"p\">&gt;<\/span>\n<span class=\"p\">{<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0633\u0631\u0627\u0646\u062c\u0627\u0645 \u060c \u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 DI \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"n\">services<\/span><span class=\"p\">.<\/span><span class=\"n\">AddDbContext<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">BooksDbContext<\/span><span class=\"p\">&gt;((<\/span><span class=\"n\">provider<\/span><span class=\"p\">,<\/span> <span class=\"n\">options<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"n\">options<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">UseNpgsql<\/span><span class=\"p\">(<\/span><span class=\"n\">connectionString<\/span><span class=\"p\">,<\/span> <span class=\"n\">npgsqlOptions<\/span> <span class=\"p\">=&gt;<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">npgsqlOptions<\/span><span class=\"p\">.<\/span><span class=\"nf\">MigrationsHistoryTable<\/span><span class=\"p\">(<\/span><span class=\"n\">DatabaseConsts<\/span><span class=\"p\">.<\/span><span class=\"n\">MigrationTableName<\/span><span class=\"p\">,<\/span>\n                <span class=\"n\">DatabaseConsts<\/span><span class=\"p\">.<\/span><span class=\"n\">Schema<\/span><span class=\"p\">);<\/span>\n        <span class=\"p\">})<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">UseSnakeCaseNamingConvention<\/span><span class=\"p\">();<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"n\">services<\/span>\n    <span class=\"p\">.<\/span><span class=\"n\">AddIdentity<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">,<\/span> <span class=\"n\">Role<\/span><span class=\"p\">&gt;(<\/span><span class=\"n\">options<\/span> <span class=\"p\">=&gt;<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireDigit<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireLowercase<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireUppercase<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequireNonAlphanumeric<\/span> <span class=\"p\">=<\/span> <span class=\"k\">true<\/span><span class=\"p\">;<\/span>\n        <span class=\"n\">options<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">.<\/span><span class=\"n\">RequiredLength<\/span> <span class=\"p\">=<\/span> <span class=\"m\">8<\/span><span class=\"p\">;<\/span>\n    <span class=\"p\">})<\/span>\n    <span class=\"p\">.<\/span><span class=\"n\">AddEntityFrameworkStores<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">BooksDbContext<\/span><span class=\"p\">&gt;()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">AddSignInManager<\/span><span class=\"p\">()<\/span>\n    <span class=\"p\">.<\/span><span class=\"nf\">AddDefaultTokenProviders<\/span><span class=\"p\">();<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u060c \u062a\u0645\u0627\u0645 \u062c\u062f\u0627\u0648\u0644 \u0648 \u0633\u062a\u0648\u0646 \u0647\u0627\u06cc \u0645\u0648\u062c\u0648\u062f \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062f\u0631 Pascalcase \u0642\u0631\u0627\u0631 \u0645\u06cc \u06af\u06cc\u0631\u0646\u062f.<br \/>\u0627\u06af\u0631 \u0627\u0644\u06af\u0648\u0647\u0627\u06cc \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0633\u0627\u0632\u06af\u0627\u0631 \u0648 \u0627\u062a\u0648\u0645\u0627\u062a\u06cc\u06a9 \u0631\u0627 \u062a\u0631\u062c\u06cc\u062d \u0645\u06cc \u062f\u0647\u06cc\u062f \u060c \u0628\u0633\u062a\u0647 \u0631\u0627 \u062f\u0631 \u0646\u0638\u0631 \u0628\u06af\u06cc\u0631\u06cc\u062f <code>EFCore.NamingConventions<\/code>:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>dotnet add package EFCore.NamingConventions\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u067e\u0633 \u0627\u0632 \u0646\u0635\u0628 \u060c \u0634\u0645\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u0628\u0627\u06cc\u062f \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u06a9\u0646\u0648\u0627\u0646\u0633\u06cc\u0648\u0646 \u0646\u0627\u0645\u06af\u0630\u0627\u0631\u06cc \u0631\u0627 \u0628\u0647 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc DBContext \u062e\u0648\u062f \u0648\u0635\u0644 \u06a9\u0646\u06cc\u062f.<br \/>\u062f\u0631 \u062b\u0628\u062a \u0646\u0627\u0645 DBContext \u0645\u0646 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0645 <code>UseSnakeCaseNamingConvention()<\/code> \u0628\u0631\u0627\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 Postgres \u0645\u0646.<br \/>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0646\u0627\u0645 \u062c\u062f\u0648\u0644 \u0648 \u0633\u062a\u0648\u0646 \u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc \u0631\u0633\u062f: <code>user_claims<\/code>\u0628\u0627 <code>user_id<\/code>\u060c \u0648 \u063a\u06cc\u0631\u0647<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AB%D8%A8%D8%AA_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA\"><\/span>\n<p>  \u062b\u0628\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0647\u0648\u06cc\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0647\u0648\u06cc\u062a \u0633\u06cc\u0645 \u06a9\u0634\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0631\u0627 \u062f\u0631 \u0645\u0639\u0631\u0636 \u0646\u0645\u0627\u06cc\u0634 \u0628\u06af\u0630\u0627\u0631\u06cc\u062f \u062a\u0627 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062c\u062f\u06cc\u062f \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u0646\u062f.<br \/>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u06cc\u06a9 \u0645\u062b\u0627\u0644 \u062d\u062f\u0627\u0642\u0644 API \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">record<\/span> <span class=\"nc\">RegisterUserRequest<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"n\">Email<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">Password<\/span><span class=\"p\">);<\/span>\n\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapPost<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/register\"<\/span><span class=\"p\">,<\/span> <span class=\"k\">async<\/span> <span class=\"p\">(<\/span>\n    <span class=\"p\">[<\/span><span class=\"n\">FromBody<\/span><span class=\"p\">]<\/span> <span class=\"n\">RegisterUserRequest<\/span> <span class=\"n\">request<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">UserManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">existingUser<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">FindByEmailAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">existingUser<\/span> <span class=\"p\">!=<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">BadRequest<\/span><span class=\"p\">(<\/span><span class=\"s\">\"User already exists.\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">user<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">User<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">UserName<\/span> <span class=\"p\">=<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">Email<\/span> <span class=\"p\">=<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span>\n    <span class=\"p\">};<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">,<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(!<\/span><span class=\"n\">result<\/span><span class=\"p\">.<\/span><span class=\"n\">Succeeded<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">BadRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">.<\/span><span class=\"n\">Errors<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddToRoleAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"DefaultRole\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"k\">if<\/span> <span class=\"p\">(!<\/span><span class=\"n\">result<\/span><span class=\"p\">.<\/span><span class=\"n\">Succeeded<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">BadRequest<\/span><span class=\"p\">(<\/span><span class=\"n\">result<\/span><span class=\"p\">.<\/span><span class=\"n\">Errors<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">response<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">UserResponse<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">Created<\/span><span class=\"p\">(<\/span><span class=\"s\">$\"\/api\/users\/<\/span><span class=\"p\">{<\/span><span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">}<\/span><span class=\"s\">\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">response<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 <code>UserManager<user\/><\/code> \u06a9\u0644\u0627\u0633 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646.<\/p>\n<p>\u062b\u0628\u062a \u0646\u0627\u0645 \u0634\u0627\u0645\u0644 \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0627\u0633\u062a:<\/p>\n<ol>\n<li>\u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0642\u0628\u0644 \u0628\u0627 \u062a\u0645\u0627\u0633 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f <code>FindByEmailAsync<\/code> \u0631\u0648\u0634<\/li>\n<li>\u0627\u06af\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0648\u062c\u0648\u062f \u0646\u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0628\u0627 \u062a\u0645\u0627\u0633 \u0628\u0627 \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>CreateAsync<\/code> \u0631\u0648\u0634<\/li>\n<li>\u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0646\u0642\u0634 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <code>AddToRoleAsync<\/code> \u0631\u0648\u0634<\/li>\n<li>\u062f\u0631 \u0635\u0648\u0631\u062a \u062e\u0637\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u062b\u0628\u062a \u0646\u0627\u0645 &#8211; \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f a \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f <code>BadRequest<\/code> \u067e\u0627\u0633\u062e \u0628\u0627 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0627\u0632 \u0647\u0648\u06cc\u062a.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AD%D9%88%D9%87_%D9%88%D8%B1%D9%88%D8%AF_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%D8%A7%D9%86_%D8%A8%D8%A7_%D9%87%D9%88%DB%8C%D8%AA\"><\/span>\n<p>  \u0646\u062d\u0648\u0647 \u0648\u0631\u0648\u062f \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0627 \u0647\u0648\u06cc\u062a<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0627\u0631\u0628\u0631 \u060c \u0622\u0646\u0647\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06a9\u0646\u0646\u062f.<br \/>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u062c\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0647\u0648\u06cc\u062a \u0622\u0645\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.AspNetCore.Identity<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">Microsoft.IdentityModel.Tokens<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System.IdentityModel.Tokens.Jwt<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System.Security.Claims<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">using<\/span> <span class=\"nn\">System.Text<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">public<\/span> <span class=\"k\">record<\/span> <span class=\"nc\">LoginUserRequest<\/span><span class=\"p\">(<\/span><span class=\"kt\">string<\/span> <span class=\"n\">Email<\/span><span class=\"p\">,<\/span> <span class=\"kt\">string<\/span> <span class=\"n\">Password<\/span><span class=\"p\">);<\/span>\n\n<span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapPost<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/login\"<\/span><span class=\"p\">,<\/span> <span class=\"k\">async<\/span> <span class=\"p\">(<\/span>\n    <span class=\"p\">[<\/span><span class=\"n\">FromBody<\/span><span class=\"p\">]<\/span> <span class=\"n\">LoginUserRequest<\/span> <span class=\"n\">request<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">IOptions<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">AuthConfiguration<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">authOptions<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">UserManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">SignInManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">signInManager<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">RoleManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Role<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">)<\/span> <span class=\"p\">=&gt;<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">user<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">FindByEmailAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"n\">user<\/span> <span class=\"k\">is<\/span> <span class=\"k\">null<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">NotFound<\/span><span class=\"p\">(<\/span><span class=\"s\">\"User not found\"<\/span><span class=\"p\">);<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">signInManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">CheckPasswordSignInAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">,<\/span> <span class=\"n\">request<\/span><span class=\"p\">.<\/span><span class=\"n\">Password<\/span><span class=\"p\">,<\/span> <span class=\"k\">false<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">if<\/span> <span class=\"p\">(!<\/span><span class=\"n\">result<\/span><span class=\"p\">.<\/span><span class=\"n\">Succeeded<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">Unauthorized<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">roles<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">GetRolesAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">);<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">userRole<\/span> <span class=\"p\">=<\/span> <span class=\"n\">roles<\/span><span class=\"p\">.<\/span><span class=\"nf\">FirstOrDefault<\/span><span class=\"p\">()<\/span> <span class=\"p\">??<\/span> <span class=\"s\">\"user\"<\/span><span class=\"p\">;<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">role<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">FindByNameAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">userRole<\/span><span class=\"p\">);<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">roleClaims<\/span> <span class=\"p\">=<\/span> <span class=\"n\">role<\/span> <span class=\"k\">is<\/span> <span class=\"k\">not<\/span> <span class=\"k\">null<\/span> <span class=\"p\">?<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">GetClaimsAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">role<\/span><span class=\"p\">)<\/span> <span class=\"p\">:<\/span> <span class=\"p\">[];<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">token<\/span> <span class=\"p\">=<\/span> <span class=\"nf\">GenerateJwtToken<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">,<\/span> <span class=\"n\">authOptions<\/span><span class=\"p\">.<\/span><span class=\"n\">Value<\/span><span class=\"p\">,<\/span> <span class=\"n\">userRole<\/span><span class=\"p\">,<\/span> <span class=\"n\">roleClaims<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"n\">Results<\/span><span class=\"p\">.<\/span><span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Token<\/span> <span class=\"p\">=<\/span> <span class=\"n\">token<\/span> <span class=\"p\">});<\/span>\n<span class=\"p\">});<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0631\u0648\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0645\u0631\u0627\u062d\u0644 \u0632\u06cc\u0631 \u0631\u0627 \u0634\u0627\u0645\u0644 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<ol>\n<li>\u0634\u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u062a\u0645\u0627\u0633 \u0628\u0627 \u0634\u0645\u0627 \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f <code>FindByEmailAsync<\/code> \u0631\u0648\u0634<\/li>\n<li>\u0628\u0627 \u062a\u0645\u0627\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f <code>CheckPasswordSignInAsync<\/code> \u0631\u0648\u0634 \u0627\u0632 <code>SignInManager<user\/><\/code>\u0628\u0634\u0631<\/li>\n<li>\u0628\u0627 \u062a\u0645\u0627\u0633 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0646\u0642\u0634 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f <code>GetRolesAsync<\/code> \u0631\u0648\u0634 \u0627\u0632 <code>UserManager<user\/><\/code>\u0628\u0634\u0631<\/li>\n<li>\u0628\u0627 \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u0627\u06cc\u0646 \u0646\u0642\u0634 \u0631\u0627 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u062f <code>GetClaimsAsync<\/code> \u0631\u0648\u0634 \u0627\u0632 <code>RoleManager<role\/><\/code>\u0628\u0634\u0631<\/li>\n<li>\u062f\u0631 \u0635\u0648\u0631\u062a \u0628\u0631\u0648\u0632 \u062e\u0637\u0627 \u062f\u0631 \u0647\u0646\u06af\u0627\u0645 \u0648\u0631\u0648\u062f &#8211; \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f a \u0631\u0627 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u06cc\u062f <code>BadRequest<\/code> \u067e\u0627\u0633\u062e \u0628\u0627 \u067e\u06cc\u0627\u0645 \u062e\u0637\u0627 \u0627\u0632 \u0647\u0648\u06cc\u062a.<\/li>\n<\/ol>\n<p>\u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u067e\u0633 \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u060c \u06cc\u06a9 \u0646\u0634\u0627\u0646\u0647 JWT \u0635\u0627\u062f\u0631 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">private<\/span> <span class=\"k\">static<\/span> <span class=\"kt\">string<\/span> <span class=\"nf\">GenerateJwtToken<\/span><span class=\"p\">(<\/span><span class=\"n\">User<\/span> <span class=\"n\">user<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">AuthConfiguration<\/span> <span class=\"n\">authConfiguration<\/span><span class=\"p\">,<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"n\">userRole<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">IList<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Claim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">roleClaims<\/span><span class=\"p\">)<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">securityKey<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">SymmetricSecurityKey<\/span><span class=\"p\">(<\/span><span class=\"n\">Encoding<\/span><span class=\"p\">.<\/span><span class=\"n\">UTF8<\/span><span class=\"p\">.<\/span><span class=\"nf\">GetBytes<\/span><span class=\"p\">(<\/span><span class=\"n\">authConfiguration<\/span><span class=\"p\">.<\/span><span class=\"n\">Key<\/span><span class=\"p\">));<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">credentials<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">SigningCredentials<\/span><span class=\"p\">(<\/span><span class=\"n\">securityKey<\/span><span class=\"p\">,<\/span> <span class=\"n\">SecurityAlgorithms<\/span><span class=\"p\">.<\/span><span class=\"n\">HmacSha256<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"n\">List<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Claim<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">claims<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span>\n        <span class=\"k\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">JwtRegisteredClaimNames<\/span><span class=\"p\">.<\/span><span class=\"n\">Sub<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Email<\/span><span class=\"p\">!),<\/span>\n        <span class=\"k\">new<\/span><span class=\"p\">(<\/span><span class=\"s\">\"userid\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">user<\/span><span class=\"p\">.<\/span><span class=\"n\">Id<\/span><span class=\"p\">),<\/span>\n        <span class=\"k\">new<\/span><span class=\"p\">(<\/span><span class=\"s\">\"role\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">userRole<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">];<\/span>\n\n    <span class=\"k\">foreach<\/span> <span class=\"p\">(<\/span><span class=\"kt\">var<\/span> <span class=\"n\">roleClaim<\/span> <span class=\"k\">in<\/span> <span class=\"n\">roleClaims<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"n\">claims<\/span><span class=\"p\">.<\/span><span class=\"nf\">Add<\/span><span class=\"p\">(<\/span><span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"n\">roleClaim<\/span><span class=\"p\">.<\/span><span class=\"n\">Type<\/span><span class=\"p\">,<\/span> <span class=\"n\">roleClaim<\/span><span class=\"p\">.<\/span><span class=\"n\">Value<\/span><span class=\"p\">));<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"kt\">var<\/span> <span class=\"n\">token<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">JwtSecurityToken<\/span><span class=\"p\">(<\/span>\n        <span class=\"n\">issuer<\/span><span class=\"p\">:<\/span> <span class=\"n\">authConfiguration<\/span><span class=\"p\">.<\/span><span class=\"n\">Issuer<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">audience<\/span><span class=\"p\">:<\/span> <span class=\"n\">authConfiguration<\/span><span class=\"p\">.<\/span><span class=\"n\">Audience<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">claims<\/span><span class=\"p\">:<\/span> <span class=\"n\">claims<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">expires<\/span><span class=\"p\">:<\/span> <span class=\"n\">DateTime<\/span><span class=\"p\">.<\/span><span class=\"n\">Now<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddMinutes<\/span><span class=\"p\">(<\/span><span class=\"m\">30<\/span><span class=\"p\">),<\/span>\n        <span class=\"n\">signingCredentials<\/span><span class=\"p\">:<\/span> <span class=\"n\">credentials<\/span>\n    <span class=\"p\">);<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">JwtSecurityTokenHandler<\/span><span class=\"p\">().<\/span><span class=\"nf\">WriteToken<\/span><span class=\"p\">(<\/span><span class=\"n\">token<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0647\u0631 \u0646\u0642\u0634 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0627\u0632 \u0627\u062f\u0639\u0627\u0647\u0627 \u0631\u0627 \u062f\u0627\u0631\u062f \u060c \u0645\u0646 \u0627\u06cc\u0646 \u0627\u062f\u0639\u0627\u0647\u0627 \u0631\u0627 \u0628\u0647 \u0646\u0634\u0627\u0646\u0647 JWT \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u0645.<br \/>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0686\u06cc\u0632\u06cc \u0627\u0633\u062a \u06a9\u0647 \u06cc\u06a9 \u0646\u0634\u0627\u0646\u0647 JWT \u0635\u0627\u062f\u0631 \u0634\u062f\u0647 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0646\u0638\u0631 \u0628\u0631\u0633\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"p\">{<\/span>\n  <span class=\"s\">\"sub\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"admin@test.com\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"userid\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"dc233fac-bace-4719-9a4f-853e199300d5\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"role\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"Admin\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"users:create\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"users:update\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"users:delete\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"books:create\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"books:update\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"books:delete\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"exp\"<\/span><span class=\"p\">:<\/span> <span class=\"m\">1739481834<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"iss\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"DevTips\"<\/span><span class=\"p\">,<\/span>\n  <span class=\"s\">\"aud\"<\/span><span class=\"p\">:<\/span> <span class=\"s\">\"DevTips\"<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0628\u0631\u0627\u06cc \u0645\u062b\u0627\u0644 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0627\u062f\u0639\u0627\u0647\u0627 \u0628\u0631\u0627\u06cc \u0645\u062d\u062f\u0648\u062f \u06a9\u0631\u062f\u0646 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0646\u0642\u0627\u0637 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapPost<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/books\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Handle<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">RequireAuthorization<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:create\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapDelete<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/books\/{id}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Handle<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">RequireAuthorization<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:delete\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapPost<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/users\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Handle<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">RequireAuthorization<\/span><span class=\"p\">(<\/span><span class=\"s\">\"users:create\"<\/span><span class=\"p\">);<\/span>\n\n    <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">MapDelete<\/span><span class=\"p\">(<\/span><span class=\"s\">\"\/api\/users\/{id}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">Handle<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">.<\/span><span class=\"nf\">RequireAuthorization<\/span><span class=\"p\">(<\/span><span class=\"s\">\"users:delete\"<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0645\u0646 \u0646\u062d\u0648\u0647 \u062a\u0646\u0638\u06cc\u0645 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0648 \u0645\u062c\u0648\u0632 \u0631\u0627 \u062f\u0631 \u0647\u0633\u062a\u0647 ASP.NET \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0645.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AD%D9%88%D9%87_%D8%A8%D8%B0%D8%B1_%D8%AF%D8%A7%D8%AF%D9%87_%D9%87%D8%A7%DB%8C_%D9%87%D9%88%DB%8C%D8%AA_%D9%86%D9%82%D8%B4_%D9%87%D8%A7_%D9%88_%D8%A7%D8%AF%D8%B9%D8%A7%D9%87%D8%A7_%D8%B1%D8%A7_%D8%A2%D8%BA%D8%A7%D8%B2_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  \u0646\u062d\u0648\u0647 \u0628\u0630\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0647\u0648\u06cc\u062a: \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627 \u0631\u0627 \u0622\u063a\u0627\u0632 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627 \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u067e\u06cc\u0634 \u0641\u0631\u0636 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f \u060c \u0628\u0630\u0631 \u0645\u0641\u06cc\u062f \u0627\u0633\u062a.<br \/>\u06cc\u06a9 \u0631\u0648\u06cc\u06a9\u0631\u062f \u0645\u0634\u062a\u0631\u06a9 \u0628\u0647 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u0628\u0630\u0631 \u06cc\u06a9 \u0628\u0627\u0631 \u062f\u0631 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"kt\">var<\/span> <span class=\"n\">app<\/span> <span class=\"p\">=<\/span> <span class=\"n\">builder<\/span><span class=\"p\">.<\/span><span class=\"nf\">Build<\/span><span class=\"p\">();<\/span>\n\n<span class=\"c1\">\/\/ Register middlewares...<\/span>\n\n<span class=\"c1\">\/\/ Create and seed database<\/span>\n<span class=\"k\">using<\/span> <span class=\"p\">(<\/span><span class=\"kt\">var<\/span> <span class=\"n\">scope<\/span> <span class=\"p\">=<\/span> <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"n\">Services<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateScope<\/span><span class=\"p\">())<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">dbContext<\/span> <span class=\"p\">=<\/span> <span class=\"n\">scope<\/span><span class=\"p\">.<\/span><span class=\"n\">ServiceProvider<\/span><span class=\"p\">.<\/span><span class=\"n\">GetRequiredService<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">BooksDbContext<\/span><span class=\"p\">&gt;();<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">userManager<\/span> <span class=\"p\">=<\/span> <span class=\"n\">scope<\/span><span class=\"p\">.<\/span><span class=\"n\">ServiceProvider<\/span><span class=\"p\">.<\/span><span class=\"n\">GetRequiredService<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">UserManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;&gt;();<\/span>\n    <span class=\"kt\">var<\/span> <span class=\"n\">roleManager<\/span> <span class=\"p\">=<\/span> <span class=\"n\">scope<\/span><span class=\"p\">.<\/span><span class=\"n\">ServiceProvider<\/span><span class=\"p\">.<\/span><span class=\"n\">GetRequiredService<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">RoleManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Role<\/span><span class=\"p\">&gt;&gt;();<\/span>\n\n    <span class=\"k\">await<\/span> <span class=\"n\">DatabaseSeedService<\/span><span class=\"p\">.<\/span><span class=\"nf\">SeedAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">dbContext<\/span><span class=\"p\">,<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">,<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">await<\/span> <span class=\"n\">app<\/span><span class=\"p\">.<\/span><span class=\"nf\">RunAsync<\/span><span class=\"p\">();<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"k\">class<\/span> <span class=\"nc\">DatabaseSeedService<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"k\">public<\/span> <span class=\"k\">static<\/span> <span class=\"k\">async<\/span> <span class=\"n\">Task<\/span> <span class=\"nf\">SeedAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">BooksDbContext<\/span> <span class=\"n\">dbContext<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">RoleManager<\/span><span class=\"p\">&lt;<\/span><span class=\"n\">Role<\/span><span class=\"p\">&gt;<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">{<\/span>\n        <span class=\"k\">await<\/span> <span class=\"n\">dbContext<\/span><span class=\"p\">.<\/span><span class=\"n\">Database<\/span><span class=\"p\">.<\/span><span class=\"nf\">MigrateAsync<\/span><span class=\"p\">();<\/span>\n\n        <span class=\"k\">if<\/span> <span class=\"p\">(<\/span><span class=\"k\">await<\/span> <span class=\"n\">dbContext<\/span><span class=\"p\">.<\/span><span class=\"n\">Users<\/span><span class=\"p\">.<\/span><span class=\"nf\">AnyAsync<\/span><span class=\"p\">())<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"k\">return<\/span><span class=\"p\">;<\/span>\n        <span class=\"p\">}<\/span>\n\n        <span class=\"c1\">\/\/ Seed roles and claims here<\/span>\n\n        <span class=\"k\">await<\/span> <span class=\"n\">dbContext<\/span><span class=\"p\">.<\/span><span class=\"nf\">SaveChangesAsync<\/span><span class=\"p\">();<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 <code>RoleManager<role\/><\/code> \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0646\u0642\u0634 \u0647\u0627 \u0648 \u0627\u062f\u0639\u0627\u0647\u0627\u06cc \u0622\u0646\u0647\u0627:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"kt\">var<\/span> <span class=\"n\">adminRole<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Role<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"Admin\"<\/span> <span class=\"p\">};<\/span>\n<span class=\"kt\">var<\/span> <span class=\"n\">authorRole<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">Role<\/span> <span class=\"p\">{<\/span> <span class=\"n\">Name<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"Author\"<\/span> <span class=\"p\">};<\/span>\n\n<span class=\"kt\">var<\/span> <span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">);<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">authorRole<\/span><span class=\"p\">);<\/span>\n\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"users:create\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"users:update\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"users:delete\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:create\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:update\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:delete\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">authorRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:create\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">authorRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:update\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">roleManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddClaimAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">authorRole<\/span><span class=\"p\">,<\/span> <span class=\"k\">new<\/span> <span class=\"nf\">Claim<\/span><span class=\"p\">(<\/span><span class=\"s\">\"books:delete\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"true\"<\/span><span class=\"p\">));<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0646\u062d\u0648\u0647 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0622\u0648\u0631\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight csharp\"><code><span class=\"kt\">var<\/span> <span class=\"n\">adminUser<\/span> <span class=\"p\">=<\/span> <span class=\"k\">new<\/span> <span class=\"n\">User<\/span>\n<span class=\"p\">{<\/span>\n    <span class=\"n\">Id<\/span> <span class=\"p\">=<\/span> <span class=\"n\">Guid<\/span><span class=\"p\">.<\/span><span class=\"nf\">NewGuid<\/span><span class=\"p\">().<\/span><span class=\"nf\">ToString<\/span><span class=\"p\">(),<\/span>\n    <span class=\"n\">Email<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"admin@test.com\"<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">UserName<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"admin@test.com\"<\/span>\n<span class=\"p\">};<\/span>\n\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">CreateAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminUser<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Test1234!\"<\/span><span class=\"p\">);<\/span>\n<span class=\"n\">result<\/span> <span class=\"p\">=<\/span> <span class=\"k\">await<\/span> <span class=\"n\">userManager<\/span><span class=\"p\">.<\/span><span class=\"nf\">AddToRoleAsync<\/span><span class=\"p\">(<\/span><span class=\"n\">adminUser<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"Admin\"<\/span><span class=\"p\">);<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062a\u063a\u06cc\u06cc\u0631 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u067e\u0633 \u0627\u0632 \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645 \u0628\u0631\u0627\u06cc \u0627\u0648\u0644\u06cc\u0646 \u0628\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a.<\/p>\n<blockquote>\n<p><strong><em>\u062f\u0631 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0645\u0646: antondevtips.com \u0645\u0646 \u0628\u0647\u062a\u0631\u06cc\u0646 \u0631\u0648\u0634 \u0647\u0627\u06cc .NET \u0648 \u0645\u0639\u0645\u0627\u0631\u06cc \u0631\u0627 \u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u0645\u06cc \u06af\u0630\u0627\u0631\u0645.<\/em><\/strong><br \/><strong><em>\u0628\u0631\u0627\u06cc \u0628\u0647\u0628\u0648\u062f \u0645\u0647\u0627\u0631\u062a \u0647\u0627\u06cc \u062f\u0627\u062a \u0646\u062a \u062e\u0648\u062f \u062f\u0631 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0646 \u0645\u0634\u062a\u0631\u06a9 \u0634\u0648\u06cc\u062f.<\/em><\/strong><br \/><strong><em>\u06a9\u062f \u0645\u0646\u0628\u0639 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062e\u0628\u0631\u0646\u0627\u0645\u0647 \u0628\u0647 \u0635\u0648\u0631\u062a \u0631\u0627\u06cc\u06af\u0627\u0646 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc \u06a9\u0646\u06cc\u062f.<\/em><\/strong><\/p>\n<\/blockquote><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0627\u0645\u0646\u06cc\u062a \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06cc\u06a9\u06cc \u0627\u0632 \u0645\u0647\u0645\u062a\u0631\u06cc\u0646 \u062c\u0646\u0628\u0647 \u0647\u0627\u06cc \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u0633\u062a.\u062f\u0631\u06a9 \u0648 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u0628\u0632\u0627\u0631\u0647\u0627\u06cc \u0627\u062b\u0628\u0627\u062a \u0634\u062f\u0647 \u0628\u0631\u0627\u06cc \u062c\u0644\u0648\u06af\u06cc\u0631\u06cc \u0627\u0632 \u0622\u0633\u06cc\u0628 \u067e\u0630\u06cc\u0631\u06cc \u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06a9 \u0645\u0627\u0646\u0646\u062f \u062f\u0633\u062a\u0631\u0633\u06cc \u063a\u06cc\u0631\u0645\u062c\u0627\u0632 \u0648 \u0646\u0634\u062a \u062f\u0627\u062f\u0647 \u0647\u0627 \u0628\u0633\u06cc\u0627\u0631 \u0645\u0647\u0645 \u0627\u0633\u062a. \u0647\u0648\u06cc\u062a \u0627\u0635\u0644\u06cc Asp.net \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646 \u0631\u0648\u0634\u06cc \u0642\u062f\u0631\u062a\u0645\u0646\u062f \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u060c \u0646\u0642\u0634 \u0647\u0627 \u060c \u0627\u062f\u0639\u0627\u0647\u0627 \u0648 \u0627\u0646\u062c\u0627\u0645 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a &hellip;<\/p>\n","protected":false},"author":2,"featured_media":109807,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-109806","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/109806","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=109806"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/109806\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/109807"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=109806"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=109806"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=109806"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}