{"id":16310,"date":"2024-01-23T09:15:12","date_gmt":"2024-01-23T05:45:12","guid":{"rendered":"https:\/\/rasanegar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/"},"modified":"2024-01-23T09:15:12","modified_gmt":"2024-01-23T05:45:12","slug":"%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7","status":"publish","type":"post","link":"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/","title":{"rendered":"\u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u062f\u0631 Express.js\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u0645 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 Express.js \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0627\u0632 \u0628\u0631\u062e\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 ES6 \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u06af\u0631 \u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0641\u0646\u0627\u0648\u0631\u06cc \u0647\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.  \u0632\u0648\u062c&#8230;"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_85 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\"><p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0633\u0631\u0641\u0635\u0644\u0647\u0627\u06cc \u0645\u0637\u0644\u0628<\/p>\n<\/div><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:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d9%85%d8%b9%d8%b1%d9%81%db%8c\" >\u0645\u0639\u0631\u0641\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d8%b1%d8%a7%d9%87_%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c_%d9%be%d8%b1%d9%88%da%98%d9%87\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d9%be%db%8c%d8%a7%d8%af%d9%87_%d8%b3%d8%a7%d8%b2%db%8c\" >\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d8%ab%d8%a8%d8%aa_%d8%ad%d8%b3%d8%a7%d8%a8\" >\u062b\u0628\u062a \u062d\u0633\u0627\u0628<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d9%88%d8%b1%d9%88%d8%af_%d8%a8%d9%87_%d8%ad%d8%b3%d8%a7%d8%a8_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c\" >\u0648\u0631\u0648\u062f \u0628\u0647 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/rasanegaar.com\/blog\/%d9%85%d8%af%db%8c%d8%b1%db%8c%d8%aa-%d8%a7%d8%ad%d8%b1%d8%a7%d8%b2-%d9%87%d9%88%db%8c%d8%aa-%d8%af%d8%b1-express-js%d8%af%d8%b1-%d8%a7%db%8c%d9%86-%d9%85%d9%82%d8%a7%d9%84%d9%87%d8%8c-%d9%85%d8%a7\/#%d9%86%d8%aa%db%8c%d8%ac%d9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 7<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span><p> <br \/>\n<\/p>\n<div class=\"content\"><noscript><\/p>\n<style>.lazyload-placeholder { display: none;  }<\/style>\n<p><\/noscript><\/p>\n<h2 id=\"introduction\"><span class=\"ez-toc-section\" id=\"%d9%85%d8%b9%d8%b1%d9%81%db%8c\"><\/span>\u0645\u0639\u0631\u0641\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u0645 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 Express.js \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0627\u0632 \u0628\u0631\u062e\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 ES6 \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u06af\u0631 \u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0641\u0646\u0627\u0648\u0631\u06cc \u0647\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.<\/p>\n<p>\u062d\u062a\u06cc \u0627\u06af\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062f\u0631 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0627\u0642\u0639\u06cc \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0628\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0631\u0627 \u0633\u0627\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0631\u06cc\u0645\u060c \u0627\u0632 \u0647\u06cc\u0686 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u06cc\u0627 \u0631\u0648\u0634 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0627\u06cc\u0645\u06cc\u0644 \u0645\u0627\u0646\u0646\u062f \u0627\u0631\u0633\u0627\u0644 \u0627\u06cc\u0645\u06cc\u0644 \u0628\u0627 \u06a9\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u0633\u0646\u062c\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0646\u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f.<\/p>\n<h2 id=\"projectsetup\"><span class=\"ez-toc-section\" id=\"%d8%b1%d8%a7%d9%87_%d8%a7%d9%86%d8%af%d8%a7%d8%b2%db%8c_%d9%be%d8%b1%d9%88%da%98%d9%87\"><\/span>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0628\u062a\u062f\u0627\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u067e\u0648\u0634\u0647 \u062c\u062f\u06cc\u062f \u0628\u0647 \u0646\u0627\u0645\u060c \u0645\u062b\u0644\u0627\u064b\u060c \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645. <code>simple-web-app<\/code>.  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 terminal\u060c \u0628\u0647 \u0622\u0646 \u067e\u0648\u0634\u0647 \u0645\u06cc \u0631\u0648\u06cc\u0645 \u0648 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Node.js \u0627\u0633\u06a9\u0644\u062a \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> npm init<\/span>\n<\/code><\/pre>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 Express \u0631\u0627 \u0646\u06cc\u0632 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> npm install --save express<\/span>\n<\/code><\/pre>\n<p>\u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u0647 \u0646\u06af\u0647 \u062f\u0627\u0634\u062a\u0646 \u06a9\u0627\u0631\u0647\u0627\u060c \u0627\u0632 \u06cc\u06a9 \u0645\u0648\u062a\u0648\u0631 \u0631\u0646\u062f\u0631 \u0633\u0645\u062a \u0633\u0631\u0648\u0631 \u0628\u0647 \u0646\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/handlebarsjs.com\/\">\u062f\u0633\u062a\u0647 \u062f\u0633\u062a\u0647<\/a>.  \u0627\u06cc\u0646 \u0645\u0648\u062a\u0648\u0631 \u0635\u0641\u062d\u0627\u062a HTML \u0645\u0627 \u0631\u0627 \u0631\u0646\u062f\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0631\u0648\u06cc \u0633\u0645\u062a \u0633\u0631\u0648\u0631\u060c \u0628\u0647 \u0647\u0645\u06cc\u0646 \u062f\u0644\u06cc\u0644\u060c \u0645\u0627 \u0628\u0647 \u0647\u06cc\u0686 \u0686\u0627\u0631\u0686\u0648\u0628 \u0641\u0631\u0627\u0646\u062a \u0627\u0646\u062f \u062f\u06cc\u06af\u0631\u06cc \u0645\u0627\u0646\u0646\u062f Angular \u06cc\u0627 React \u0646\u06cc\u0627\u0632 \u0646\u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u0634\u062a.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u062c\u0644\u0648 \u0628\u0631\u0648\u06cc\u0645 \u0648 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u0645 <code>express-handlebars<\/code>:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> npm install --save express-handlebars<\/span>\n<\/code><\/pre>\n<p>\u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0627\u0632 \u062f\u0648 \u0628\u0633\u062a\u0647 \u0645\u06cc\u0627\u0646\u0627\u0641\u0632\u0627\u0631 Express \u062f\u06cc\u06af\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f (<code>body-parser<\/code> \u0648 <code>cookie-parser<\/code>) \u0628\u0631\u0627\u06cc \u062a\u062c\u0632\u06cc\u0647 \u0628\u062f\u0646\u0647 \u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0648 \u062a\u062c\u0632\u06cc\u0647 \u06a9\u0648\u06a9\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0628\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">$<\/span><span class=\"bash\"> npm install --save body-parser cookie-parser<\/span>\n<\/code><\/pre>\n<h2 id=\"implementation\"><span class=\"ez-toc-section\" id=\"%d9%be%db%8c%d8%a7%d8%af%d9%87_%d8%b3%d8%a7%d8%b2%db%8c\"><\/span>\u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0646\u0627\u0645\u0647 \u0627\u06cc \u06a9\u0647 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u0628\u0633\u0627\u0632\u06cc\u0645 \u062d\u0627\u0648\u06cc \u06cc\u06a9 &#8220;\u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647&#8221; \u062e\u0648\u0627\u0647\u062f \u0628\u0648\u062f page \u06a9\u0647 \u0641\u0642\u0637 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u0646\u062f \u0627\u0632 \u0622\u0646 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u0646\u062f\u060c \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a\u060c \u0628\u0647 \u062e\u0627\u0646\u0647 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u0634\u0648\u0646\u062f page &#8211; \u0627\u0632 \u0622\u0646\u0647\u0627 \u062e\u0648\u0627\u0633\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0648\u0627\u0631\u062f \u0633\u06cc\u0633\u062a\u0645 \u0634\u0648\u0646\u062f \u06cc\u0627 \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f import \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0646\u0635\u0628 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> express = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'express'<\/span>);\n<span class=\"hljs-keyword\">const<\/span> exphbs = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'express-handlebars'<\/span>);\n<span class=\"hljs-keyword\">const<\/span> cookieParser = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'cookie-parser'<\/span>);\n<span class=\"hljs-keyword\">const<\/span> bodyParser = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'body-parser'<\/span>);\n<\/code><\/pre>\n<p>\u0645\u0627 \u0627\u0632 Node&#8217;s native \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f <code>crypto<\/code> \u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0627\u06cc \u0647\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0648 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0646\u0634\u0627\u0646\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a &#8211; \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u06a9\u0645\u06cc \u0628\u0639\u062f\u0627\u064b \u062f\u0631 \u0645\u0642\u0627\u0644\u0647 \u062a\u0648\u0636\u06cc\u062d \u062f\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u062f \u0634\u062f.<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 Express \u0633\u0627\u062f\u0647 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u0648 \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631\u06cc \u0631\u0627 \u06a9\u0647 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645\u060c \u062f\u0631 \u06a9\u0646\u0627\u0631 \u0645\u0648\u062a\u0648\u0631 Handlebars \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> app = express();\n\n<span class=\"hljs-comment\">\/\/ To support URL-encoded bodies<\/span>\napp.use(bodyParser.urlencoded({ <span class=\"hljs-attr\">extended<\/span>: <span class=\"hljs-literal\">true<\/span> }));\n\n<span class=\"hljs-comment\">\/\/ To parse cookies from the HTTP Request<\/span>\napp.use(cookieParser());\n\napp.engine(<span class=\"hljs-string\">'hbs'<\/span>, exphbs({\n    <span class=\"hljs-attr\">extname<\/span>: <span class=\"hljs-string\">'.hbs'<\/span>\n}));\n\napp.set(<span class=\"hljs-string\">'view engine'<\/span>, <span class=\"hljs-string\">'hbs'<\/span>);\n\n<span class=\"hljs-comment\">\/\/ Our requests hadlers will be implemented here...<\/span>\n\napp.listen(<span class=\"hljs-number\">3000<\/span>);\n<\/code><\/pre>\n<p>\u0628\u0647 \u0637\u0648\u0631 \u067e\u06cc\u0634 \u0641\u0631\u0636 \u062f\u0631 Handlebars\u060c \u067e\u0633\u0648\u0646\u062f \u0642\u0627\u0644\u0628 \u0628\u0627\u06cc\u062f \u0628\u0627\u0634\u062f <code>.handlebars<\/code>.  \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u06a9\u062f \u0645\u0634\u0627\u0647\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u062f\u060c \u0645\u0648\u062a\u0648\u0631 \u0642\u0627\u0644\u0628 \u0641\u0631\u0645\u0627\u0646 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0628\u0627 \u0622\u0646 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 <code>.hbs<\/code> \u067e\u0633\u0648\u0646\u062f \u06a9\u0648\u062a\u0627\u0647 \u062a\u0631  \u062d\u0627\u0644\u0627 \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0686\u0646\u062f \u0641\u0627\u06cc\u0644 \u0642\u0627\u0644\u0628 \u0628\u0633\u0627\u0632\u06cc\u0645:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/rasanegar.com\/blog\/wp-content\/uploads\/2024\/01\/handling-authentication-in-express-1.png\" alt=\"\u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc \u0642\u0627\u0644\u0628\" title=\"\"><\/p>\n<p>\u0627\u06cc\u0646 <code>layouts<\/code> \u067e\u0648\u0634\u0647 \u062f\u0627\u062e\u0644 <code>view<\/code> \u067e\u0648\u0634\u0647 \u0686\u06cc\u062f\u0645\u0627\u0646 \u0627\u0635\u0644\u06cc \u0634\u0645\u0627 \u0631\u0627 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u062f\u060c \u06a9\u0647 HTML \u067e\u0627\u06cc\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u06cc\u0631 \u0642\u0627\u0644\u0628 \u0647\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>main.hbs<\/code>\u0644\u0641\u0627\u0641 \u0627\u0635\u0644\u06cc \u0645\u0627 page:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-meta\">&lt;!DOCTYPE <span class=\"hljs-meta-keyword\">html<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">html<\/span> <span class=\"hljs-attr\">lang<\/span>=<span class=\"hljs-string\">\"en\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">charset<\/span>=<span class=\"hljs-string\">\"UTF-8\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"viewport\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"width=device-width, initial-scale=1.0\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">meta<\/span> <span class=\"hljs-attr\">http-equiv<\/span>=<span class=\"hljs-string\">\"X-UA-Compatible\"<\/span> <span class=\"hljs-attr\">content<\/span>=<span class=\"hljs-string\">\"ie=edge\"<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">title<\/span>&gt;<\/span>Document<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">title<\/span>&gt;<\/span>\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">link<\/span> <span class=\"hljs-attr\">rel<\/span>=<span class=\"hljs-string\">\"stylesheet\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.3.1\/css\/bootstrap.min.css\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">head<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"container\"<\/span>&gt;<\/span>\n            {{{body}}}\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/code.jquery.com\/jquery-3.3.1.slim.min.js\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/popper.js\/1.14.7\/umd\/popper.min.js\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">script<\/span> <span class=\"hljs-attr\">src<\/span>=<span class=\"hljs-string\">\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.3.1\/js\/bootstrap.min.js\"<\/span>&gt;<\/span><span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">script<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">body<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">html<\/span>&gt;<\/span>\n<\/code><\/pre>\n<p>\u0633\u0627\u06cc\u0631 \u0642\u0627\u0644\u0628 \u0647\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0631\u0646\u062f\u0631 \u0645\u06cc \u0634\u0648\u0646\u062f <code>{{{body}}}<\/code> \u0628\u0631\u0686\u0633\u0628 \u0627\u06cc\u0646 \u0642\u0627\u0644\u0628  \u0645\u0627 HTML boilerplate \u0648 \u0641\u0627\u06cc\u0644 \u0647\u0627\u06cc CSS \u0648 JS \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u062f\u0627\u0631\u06cc\u0645 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/getbootstrap.com\/\">\u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e<\/a> \u062f\u0631 \u0627\u06cc\u0646 \u0637\u0631\u062d \u0648\u0627\u0631\u062f \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u067e\u0633 \u0627\u0632 \u0627\u0646\u062c\u0627\u0645 \u0628\u0633\u062a\u0647 \u0628\u0646\u062f\u06cc \u0627\u0635\u0644\u06cc\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0622\u0646 \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>home.hbs<\/code> page\u060c \u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0627\u0632 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062e\u0648\u0627\u0633\u062a\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648\u0627\u0631\u062f \u0633\u06cc\u0633\u062a\u0645 \u0634\u0648\u0646\u062f \u06cc\u0627 \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u0646\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">nav<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"navbar navbar-expand-lg navbar-light bg-light\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"navbar-brand\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"#\"<\/span>&gt;<\/span>Simple Authentication App<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">nav<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-top: 30px\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary btn-lg active\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"\/login\"<\/span>&gt;<\/span>Login<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary btn-lg active\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"\/register\"<\/span>&gt;<\/span>Register<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/pre>\n<p>\u0633\u067e\u0633 \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u0627\u06cc \u0645\u0633\u06cc\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 root \u0645\u0633\u06cc\u0631 (<code>\/<\/code>) \u0628\u0631\u0627\u06cc \u0631\u0646\u062f\u0631 \u06a9\u0631\u062f\u0646 \u0642\u0627\u0644\u0628 \u062e\u0627\u0646\u0647.<\/p>\n<pre><code class=\"hljs\">app.get(<span class=\"hljs-string\">'\/'<\/span>, <span class=\"hljs-function\"><span class=\"hljs-keyword\">function<\/span> (<span class=\"hljs-params\">req, res<\/span>) <\/span>{\n    res.render(<span class=\"hljs-string\">'home'<\/span>);\n});\n<\/code><\/pre>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0628\u0647 \u0622\u0646 \u0628\u0631\u0648\u06cc\u062f <code>http:\/\/localhost:3000<\/code>:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/rasanegar.com\/blog\/wp-content\/uploads\/2024\/01\/handling-authentication-in-express-2.png\" alt=\"\u06a9\u0627\u0631\u0628\u0631\u062f homepage\" title=\"\"><\/p>\n<h2 id=\"accountregistration\"><span class=\"ez-toc-section\" id=\"%d8%ab%d8%a8%d8%aa_%d8%ad%d8%b3%d8%a7%d8%a8\"><\/span>\u062b\u0628\u062a \u062d\u0633\u0627\u0628<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u06cc\u06a9 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0632 \u0637\u0631\u06cc\u0642 a <code>registration.hbs<\/code> page:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"row justify-content-md-center\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-top: 30px\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"col-md-4\"<\/span>&gt;<\/span>\n\n        {{#if message}}\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"alert {{messageClass}}\"<\/span> <span class=\"hljs-attr\">role<\/span>=<span class=\"hljs-string\">\"alert\"<\/span>&gt;<\/span>\n                {{message}}\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        {{\/if}}\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/register\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"firstNameInput\"<\/span>&gt;<\/span>First Name<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"firstName\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"firstNameInput\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"lastNameInput\"<\/span>&gt;<\/span>Last Name<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"firstName\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"text\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"lastNameInput\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"emailInput\"<\/span>&gt;<\/span>Email address<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"emailInput\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Enter email\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"passwordInput\"<\/span>&gt;<\/span>Password<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"passwordInput\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Password\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"confirmPasswordInput\"<\/span>&gt;<\/span>Confirm Password<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"confirmPassword\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"confirmPasswordInput\"<\/span>\n                    <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Re-enter your password here\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"submit\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary\"<\/span>&gt;<\/span>Login<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0642\u0627\u0644\u0628 \u06cc\u06a9 \u0641\u0631\u0645 \u0628\u0627 \u0641\u06cc\u0644\u062f\u0647\u0627\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0627\u0631\u0628\u0631 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 \u06a9\u0647 \u0646\u0627\u0645\u060c \u0646\u0627\u0645 \u062e\u0627\u0646\u0648\u0627\u062f\u06af\u06cc\u060c \u0622\u062f\u0631\u0633 \u0627\u06cc\u0645\u06cc\u0644\u060c \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0648 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u062a\u0627\u06cc\u06cc\u062f \u0627\u0633\u062a \u0648 \u0639\u0645\u0644 \u062e\u0648\u062f \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 <code>\/register<\/code> \u0645\u0633\u06cc\u0631  \u0647\u0645\u0686\u0646\u06cc\u0646 \u06cc\u06a9 \u0641\u06cc\u0644\u062f \u067e\u06cc\u0627\u0645 \u062f\u0627\u0631\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0622\u0646 \u067e\u06cc\u0627\u0645 \u0647\u0627\u06cc \u062e\u0637\u0627 \u0648 \u0645\u0648\u0641\u0642\u06cc\u062a \u0631\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u062f\u0631 \u0635\u0648\u0631\u062a \u0639\u062f\u0645 \u062a\u0637\u0627\u0628\u0642 \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u0648 \u063a\u06cc\u0631\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0645\u06cc \u062f\u0647\u06cc\u0645.<\/p>\n<p>\u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u062f\u0633\u062a\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0647\u0646\u06af\u0627\u0645 \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631\u060c \u0627\u0644\u06af\u0648\u06cc \u062b\u0628\u062a \u0646\u0627\u0645 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f <code>http:\/\/localhost:3000\/register<\/code>:<\/p>\n<pre><code class=\"hljs\">app.get(<span class=\"hljs-string\">'\/register'<\/span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    res.render(<span class=\"hljs-string\">'register'<\/span>);\n});\n<\/code><\/pre>\n<p>\u0628\u0647 \u062f\u0644\u06cc\u0644 \u0646\u06af\u0631\u0627\u0646\u06cc\u200c\u0647\u0627\u06cc \u0627\u0645\u0646\u06cc\u062a\u06cc\u060c \u0647\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0628\u0627 \u06cc\u06a9 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0642\u0648\u06cc \u0631\u0648\u0634 \u062e\u0648\u0628\u06cc \u0627\u0633\u062a <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Secure_Hash_Algorithms\">\u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645 \u0647\u0634<\/a> \u067e\u0633\u0646\u062f\u06cc\u062f\u0646 <code>SHA256<\/code>.  \u0628\u0627 \u0647\u0634 \u06a9\u0631\u062f\u0646 \u06af\u0630\u0631\u0648\u0627\u0698\u0647\u200c\u0647\u0627\u060c \u0645\u0627 \u0645\u0637\u0645\u0626\u0646 \u0645\u06cc\u200c\u0634\u0648\u06cc\u0645 \u06a9\u0647 \u062d\u062a\u06cc \u0627\u06af\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0645\u0627 \u0628\u0647 \u062e\u0637\u0631 \u0628\u06cc\u0641\u062a\u062f\u060c \u06af\u0630\u0631\u0648\u0627\u0698\u0647\u200c\u0647\u0627 \u0628\u0647 \u0633\u0627\u062f\u06af\u06cc \u062f\u0631 \u0642\u0627\u0644\u0628 \u0645\u062a\u0646\u06cc \u062f\u0631 \u0645\u0639\u0631\u0636 \u062f\u06cc\u062f \u0642\u0631\u0627\u0631 \u0646\u0645\u06cc\u200c\u06af\u06cc\u0631\u0646\u062f.<\/p>\n<p>\u06cc\u06a9 \u0631\u0648\u0634 \u062d\u062a\u06cc \u0628\u0647\u062a\u0631 \u0627\u0632 \u0647\u0634 \u06a9\u0631\u062f\u0646 \u0633\u0627\u062f\u0647 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0622\u0646 \u0627\u0633\u062a <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Salt_(cryptography)\">\u0646\u0645\u06a9<\/a>\u060c \u0645\u0627\u0646\u0646\u062f \u0628\u0627 <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/en.wikipedia.org\/wiki\/Bcrypt\">bcrypt<\/a> \u0627\u0644\u06af\u0648\u0631\u06cc\u062a\u0645  \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u0631\u0648\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u0645\u0646 \u06a9\u0631\u062f\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u0627\u062c\u0631\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0631\u0648\u0634 \u0635\u062d\u06cc\u062d \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0686\u06cc\u0632\u0647\u0627 \u0631\u0627 \u06a9\u0645\u06cc \u0633\u0627\u062f\u0647 \u062a\u0631 \u0646\u06af\u0647 \u0645\u06cc \u062f\u0627\u0631\u06cc\u0645.<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> crypto = <span class=\"hljs-built_in\">require<\/span>(<span class=\"hljs-string\">'crypto'<\/span>);\n\n<span class=\"hljs-keyword\">const<\/span> getHashedPassword = <span class=\"hljs-function\">(<span class=\"hljs-params\">password<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> sha256 = crypto.createHash(<span class=\"hljs-string\">'sha256'<\/span>);\n    <span class=\"hljs-keyword\">const<\/span> hash = sha256.update(password).digest(<span class=\"hljs-string\">'base64'<\/span>);\n    <span class=\"hljs-keyword\">return<\/span> hash;\n}\n<\/code><\/pre>\n<p>\u0647\u0646\u06af\u0627\u0645\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0631\u0645 \u062b\u0628\u062a \u0646\u0627\u0645 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0627\u0644\u0641 <code>POST<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 <code>\/register<\/code> \u0645\u0633\u06cc\u0631.<\/p>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u06af\u0641\u062a\u0647 \u0634\u062f\u060c \u0627\u06a9\u0646\u0648\u0646 \u0628\u0627\u06cc\u062f \u0622\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u0628\u0627 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0641\u0631\u0645 \u0631\u0633\u06cc\u062f\u06af\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0627\u0632\u0647 \u0627\u06cc\u062c\u0627\u062f \u0634\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u0645.  \u0645\u0639\u0645\u0648\u0644\u0627\u064b\u060c \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627 \u0645\u0627\u0646\u062f\u06af\u0627\u0631\u06cc \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc\u200c\u0634\u0648\u062f\u060c \u0627\u0645\u0627 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u06af\u06cc\u060c \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0631\u0627 \u062f\u0631 \u06cc\u06a9 \u0622\u0631\u0627\u06cc\u0647 \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0647\u0631 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u062c\u062f\u062f \u0633\u0631\u0648\u0631\u060c \u0622\u0631\u0627\u06cc\u0647 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u0645\u06cc\u200c\u06a9\u0646\u062f\u060c \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0627\u0647\u062f\u0627\u0641 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc \u0633\u062e\u062a\u200c\u06a9\u062f \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0647\u0631 \u0628\u0627\u0631 \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0634\u0648\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> users = (\n    <span class=\"hljs-comment\">\/\/ This user is added to the array to avoid creating a new user \u0631\u0648\u06cc each restart<\/span>\n    {\n        <span class=\"hljs-attr\">firstName<\/span>: <span class=\"hljs-string\">'John'<\/span>,\n        <span class=\"hljs-attr\">lastName<\/span>: <span class=\"hljs-string\">'Doe'<\/span>,\n        <span class=\"hljs-attr\">email<\/span>: <span class=\"hljs-string\">'(email\u00a0protected)'<\/span>,\n        <span class=\"hljs-comment\">\/\/ This is the SHA256 hash for value of `password`<\/span>\n        <span class=\"hljs-attr\">password<\/span>: <span class=\"hljs-string\">'XohImNooBHFR0OVvjcYpJ3NgPQ1qq73WKhHvch0VQtg='<\/span>\n    }\n);\n\napp.post(<span class=\"hljs-string\">'\/register'<\/span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> { email, firstName, lastName, password, confirmPassword } = req.body;\n\n    <span class=\"hljs-comment\">\/\/ Check if the password and confirm password fields match<\/span>\n    <span class=\"hljs-keyword\">if<\/span> (password === confirmPassword) {\n\n        <span class=\"hljs-comment\">\/\/ Check if user with the same email is also registered<\/span>\n        <span class=\"hljs-keyword\">if<\/span> (users.find(<span class=\"hljs-function\"><span class=\"hljs-params\">user<\/span> =&gt;<\/span> user.email === email)) {\n\n            res.render(<span class=\"hljs-string\">'register'<\/span>, {\n                <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'User already registered.'<\/span>,\n                <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-danger'<\/span>\n            });\n\n            <span class=\"hljs-keyword\">return<\/span>;\n        }\n\n        <span class=\"hljs-keyword\">const<\/span> hashedPassword = getHashedPassword(password);\n\n        <span class=\"hljs-comment\">\/\/ Store user into the database if you are using one<\/span>\n        users.push({\n            firstName,\n            lastName,\n            email,\n            <span class=\"hljs-attr\">password<\/span>: hashedPassword\n        });\n\n        res.render(<span class=\"hljs-string\">'login'<\/span>, {\n            <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'Registration Complete. Please login to continue.'<\/span>,\n            <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-success'<\/span>\n        });\n    } <span class=\"hljs-keyword\">else<\/span> {\n        res.render(<span class=\"hljs-string\">'register'<\/span>, {\n            <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'Password does not match.'<\/span>,\n            <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-danger'<\/span>\n        });\n    }\n});\n<\/code><\/pre>\n<p>\u062f\u0631\u06cc\u0627\u0641\u062a \u0634\u062f\u0647 <code>email<\/code>\u060c <code>firstName<\/code>\u060c <code>lastName<\/code>\u060c <code>password<\/code>\u060c \u0648 <code>confirmPassword<\/code> \u0645\u0639\u062a\u0628\u0631 \u0647\u0633\u062a\u0646\u062f &#8211; \u0631\u0645\u0632\u0647\u0627\u06cc \u0639\u0628\u0648\u0631 \u0645\u0637\u0627\u0628\u0642\u062a \u062f\u0627\u0631\u0646\u062f\u060c \u0627\u06cc\u0645\u06cc\u0644 \u0642\u0628\u0644\u0627\u064b \u062b\u0628\u062a \u0646\u0634\u062f\u0647 \u0627\u0633\u062a \u0648 \u063a\u06cc\u0631\u0647.<\/p>\n<p>\u0627\u06af\u0631 \u0647\u0631 \u0627\u0639\u062a\u0628\u0627\u0631\u0633\u0646\u062c\u06cc \u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0628\u0627\u0634\u062f\u060c \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u0631\u0627 \u0647\u0634 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u0631\u0627 \u062f\u0631 \u062f\u0627\u062e\u0644 \u0622\u0631\u0627\u06cc\u0647 \u0630\u062e\u06cc\u0631\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0647 \u0644\u0627\u06af\u06cc\u0646 \u0647\u062f\u0627\u06cc\u062a \u0645\u06cc \u06a9\u0646\u06cc\u0645. page.  \u062f\u0631 \u063a\u06cc\u0631 \u0627\u06cc\u0646 \u0635\u0648\u0631\u062a \u062b\u0628\u062a \u0646\u0627\u0645 \u0631\u0627 \u0645\u062c\u062f\u062f\u0627\u064b \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u06cc\u0645 page \u0628\u0627 \u067e\u06cc\u063a\u0627\u0645 \u062e\u0637\u0627<\/p>\n<p>\u062d\u0627\u0644\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627\u0632\u062f\u06cc\u062f \u06a9\u0646\u06cc\u0645 <code>\/register<\/code> \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631\u06a9\u0631\u062f \u0622\u0646:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/rasanegar.com\/blog\/wp-content\/uploads\/2024\/01\/handling-authentication-in-express-3.png\" alt=\"\u062b\u0628\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a page\" title=\"\"><\/p>\n<h2 id=\"accountlogin\"><span class=\"ez-toc-section\" id=\"%d9%88%d8%b1%d9%88%d8%af_%d8%a8%d9%87_%d8%ad%d8%b3%d8%a7%d8%a8_%da%a9%d8%a7%d8%b1%d8%a8%d8%b1%db%8c\"><\/span>\u0648\u0631\u0648\u062f \u0628\u0647 \u062d\u0633\u0627\u0628 \u06a9\u0627\u0631\u0628\u0631\u06cc<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u062e\u0627\u0631\u062c \u0634\u062f\u0646 \u0627\u0632 \u062b\u0628\u062a \u0646\u0627\u0645\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0639\u0645\u0644\u06a9\u0631\u062f \u0648\u0631\u0648\u062f \u0631\u0627 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645.  \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0628\u0627 \u0633\u0627\u062e\u062a\u0646 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u0645 <code>login.hbs<\/code> page:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"row justify-content-md-center\"<\/span> <span class=\"hljs-attr\">style<\/span>=<span class=\"hljs-string\">\"margin-top: 100px\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"col-md-6\"<\/span>&gt;<\/span>\n\n        {{#if message}}\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"alert {{messageClass}}\"<\/span> <span class=\"hljs-attr\">role<\/span>=<span class=\"hljs-string\">\"alert\"<\/span>&gt;<\/span>\n                {{message}}\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n        {{\/if}}\n\n        <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">form<\/span> <span class=\"hljs-attr\">method<\/span>=<span class=\"hljs-string\">\"POST\"<\/span> <span class=\"hljs-attr\">action<\/span>=<span class=\"hljs-string\">\"\/login\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"exampleInputEmail1\"<\/span>&gt;<\/span>Email address<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"email\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"exampleInputEmail1\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Enter email\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-group\"<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">label<\/span> <span class=\"hljs-attr\">for<\/span>=<span class=\"hljs-string\">\"exampleInputPassword1\"<\/span>&gt;<\/span>Password<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">label<\/span>&gt;<\/span>\n                <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">input<\/span> <span class=\"hljs-attr\">name<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"password\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"form-control\"<\/span> <span class=\"hljs-attr\">id<\/span>=<span class=\"hljs-string\">\"exampleInputPassword1\"<\/span> <span class=\"hljs-attr\">placeholder<\/span>=<span class=\"hljs-string\">\"Password\"<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n            <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">button<\/span> <span class=\"hljs-attr\">type<\/span>=<span class=\"hljs-string\">\"submit\"<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"btn btn-primary\"<\/span>&gt;<\/span>Login<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">button<\/span>&gt;<\/span>\n        <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">form<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/pre>\n<p>\u0648 \u0633\u067e\u0633\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0628\u0631\u0627\u06cc \u0622\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0646\u06cc\u0632 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\">app.get(<span class=\"hljs-string\">'\/login'<\/span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    res.render(<span class=\"hljs-string\">'login'<\/span>);\n});\n<\/code><\/pre>\n<p>\u0627\u06cc\u0646 \u0641\u0631\u0645 \u06cc\u06a9 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u062e\u0648\u0627\u0647\u062f \u06a9\u0631\u062f <code>POST<\/code> \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 <code>\/login<\/code> \u0632\u0645\u0627\u0646\u06cc \u06a9\u0647 \u06a9\u0627\u0631\u0628\u0631 \u0641\u0631\u0645 \u0631\u0627 \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f.  \u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u06a9\u0627\u0631 \u062f\u06cc\u06af\u0631\u06cc \u06a9\u0647 \u0645\u0627 \u0627\u0646\u062c\u0627\u0645 \u062e\u0648\u0627\u0647\u06cc\u0645 \u062f\u0627\u062f \u0627\u0631\u0633\u0627\u0644 \u06cc\u06a9 \u0627\u0633\u062a <em>\u0646\u0634\u0627\u0646\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a<\/em> \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f  \u0627\u06cc\u0646 \u0646\u0634\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0634\u0646\u0627\u0633\u0627\u06cc\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0647\u0631 \u0628\u0627\u0631 \u06a9\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a HTTP \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f\u060c \u0627\u06cc\u0646 \u0646\u0634\u0627\u0646\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u06a9\u0648\u06a9\u06cc \u0627\u0631\u0633\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> generateAuthToken = <span class=\"hljs-function\">() =&gt;<\/span> {\n    <span class=\"hljs-keyword\">return<\/span> crypto.randomBytes(<span class=\"hljs-number\">30<\/span>).toString(<span class=\"hljs-string\">'hex'<\/span>);\n}\n<\/code><\/pre>\n<p>\u0628\u0627 \u0631\u0648\u0634 \u06a9\u0645\u06a9\u06cc \u062e\u0648\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u0627\u06cc \u0648\u0631\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 page:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-comment\">\/\/ This will hold the users and authToken related to users<\/span>\n<span class=\"hljs-keyword\">const<\/span> authTokens = {};\n\napp.post(<span class=\"hljs-string\">'\/login'<\/span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-keyword\">const<\/span> { email, password } = req.body;\n    <span class=\"hljs-keyword\">const<\/span> hashedPassword = getHashedPassword(password);\n\n    <span class=\"hljs-keyword\">const<\/span> user = users.find(<span class=\"hljs-function\"><span class=\"hljs-params\">u<\/span> =&gt;<\/span> {\n        <span class=\"hljs-keyword\">return<\/span> u.email === email &amp;&amp; hashedPassword === u.password\n    });\n\n    <span class=\"hljs-keyword\">if<\/span> (user) {\n        <span class=\"hljs-keyword\">const<\/span> authToken = generateAuthToken();\n\n        <span class=\"hljs-comment\">\/\/ Store authentication token<\/span>\n        authTokens(authToken) = user;\n\n        <span class=\"hljs-comment\">\/\/ Setting the auth token in cookies<\/span>\n        res.cookie(<span class=\"hljs-string\">'AuthToken'<\/span>, authToken);\n\n        <span class=\"hljs-comment\">\/\/ Redirect user to the protected page<\/span>\n        res.redirect(<span class=\"hljs-string\">'\/protected'<\/span>);\n    } <span class=\"hljs-keyword\">else<\/span> {\n        res.render(<span class=\"hljs-string\">'login'<\/span>, {\n            <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'Invalid username or password'<\/span>,\n            <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-danger'<\/span>\n        });\n    }\n});\n<\/code><\/pre>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a\u060c \u0646\u0642\u0634\u0647 \u0627\u06cc \u0641\u0631\u0627\u062e\u0648\u0627\u0646\u06cc \u0645\u06cc \u0634\u0648\u062f <code>authTokens<\/code> \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u062a\u0648\u06a9\u0646 \u0647\u0627\u06cc \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06a9\u0644\u06cc\u062f \u0648 \u06a9\u0627\u0631\u0628\u0631 \u0645\u0631\u0628\u0648\u0637\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u0642\u062f\u0627\u0631 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f \u06a9\u0647 \u0627\u0645\u06a9\u0627\u0646 \u062c\u0633\u062a\u062c\u0648\u06cc \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u0633\u0627\u062f\u0647 \u0631\u0627 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.  \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/redis.io\/\">\u0631\u062f\u06cc\u0633<\/a>\u060c \u06cc\u0627 \u0648\u0627\u0642\u0639\u0627\u064b\u060c \u0647\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u06cc \u0628\u0631\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0627\u06cc\u0646 \u0646\u0634\u0627\u0646\u0647 \u0647\u0627 &#8211; \u0645\u0627 \u0627\u0632 \u0627\u06cc\u0646 \u0646\u0642\u0634\u0647 \u0628\u0631\u0627\u06cc \u0633\u0627\u062f\u06af\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645.<\/p>\n<p>\u0636\u0631\u0628\u0647 \u0632\u062f\u0646 \u0628\u0647 <code>\/login<\/code> \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\u060c \u0627\u0632 \u0645\u0627 \u0627\u0633\u062a\u0642\u0628\u0627\u0644 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/rasanegar.com\/blog\/wp-content\/uploads\/2024\/01\/handling-authentication-in-express-4.png\" alt=\"\u0648\u0631\u0648\u062f \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 page\" title=\"\"><\/p>\n<p>\u0628\u0627 \u0627\u06cc\u0646 \u062d\u0627\u0644\u060c \u0645\u0627 \u0647\u0646\u0648\u0632 \u06a9\u0627\u0645\u0644\u0627\u064b \u062a\u0645\u0627\u0645 \u0646\u0634\u062f\u0647 \u0627\u06cc\u0645.  \u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0627 \u062e\u0648\u0627\u0646\u062f\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631 \u062a\u0632\u0631\u06cc\u0642 \u06a9\u0646\u06cc\u0645 <code>authToken<\/code> \u0627\u0632 \u06a9\u0648\u06a9\u06cc \u0647\u0627 \u067e\u0633 \u0627\u0632 \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648\u0631\u0648\u062f \u0628\u0647 \u0633\u06cc\u0633\u062a\u0645.  \u0628\u0627\u0644\u0627\u062a\u0631 \u0627\u0632 \u0647\u0645\u0647 \u06af\u0631\u062f\u0627\u0646\u0646\u062f\u06af\u0627\u0646 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0648 \u0632\u06cc\u0631 <code>cookie-parser<\/code> \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u0633\u0641\u0627\u0631\u0634\u06cc \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0627\u06cc \u062a\u0632\u0631\u06cc\u0642 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0628\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645:<\/p>\n<pre><code class=\"hljs\">app.use(<span class=\"hljs-function\">(<span class=\"hljs-params\">req, res, next<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-comment\">\/\/ Get auth token from the cookies<\/span>\n    <span class=\"hljs-keyword\">const<\/span> authToken = req.cookies(<span class=\"hljs-string\">'AuthToken'<\/span>);\n\n    <span class=\"hljs-comment\">\/\/ Inject the user to the request<\/span>\n    req.user = authTokens(authToken);\n\n    next();\n});\n<\/code><\/pre>\n<p>\u062d\u0627\u0644\u0627 \u0645\u06cc\u062a\u0648\u0646\u06cc\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645 <code>req.user<\/code> \u062f\u0631 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0647\u0627\u06cc \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0627 \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.<\/p>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0627\u062c\u0627\u0632\u0647 \u062f\u0647\u06cc\u062f \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u062f\u0647\u062f page &#8211; <code>protected.hbs<\/code>:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">nav<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"navbar navbar-expand-lg navbar-light bg-light\"<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">a<\/span> <span class=\"hljs-attr\">class<\/span>=<span class=\"hljs-string\">\"navbar-brand\"<\/span> <span class=\"hljs-attr\">href<\/span>=<span class=\"hljs-string\">\"#\"<\/span>&gt;<\/span>Protected Page<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">a<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">nav<\/span>&gt;<\/span>\n\n<span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">h2<\/span>&gt;<\/span>This page is only visible to logged in users<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">h2<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">div<\/span>&gt;<\/span>\n<\/code><\/pre>\n<p>\u0648 \u06cc\u06a9 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0628\u0631\u0627\u06cc page:<\/p>\n<pre><code class=\"hljs\">app.get(<span class=\"hljs-string\">'\/protected'<\/span>, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-keyword\">if<\/span> (req.user) {\n        res.render(<span class=\"hljs-string\">'protected'<\/span>);\n    } <span class=\"hljs-keyword\">else<\/span> {\n        res.render(<span class=\"hljs-string\">'login'<\/span>, {\n            <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'Please login to continue'<\/span>,\n            <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-danger'<\/span>\n        });\n    }\n});\n<\/code><\/pre>\n<p>\u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u0645\u06cc \u0628\u06cc\u0646\u06cc\u062f\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f <code>req.user<\/code> \u0628\u0631\u0627\u06cc \u0628\u0631\u0631\u0633\u06cc \u0627\u06cc\u0646\u06a9\u0647 \u0622\u06cc\u0627 \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0633\u062a \u06cc\u0627 \u062e\u06cc\u0631.  \u0627\u06af\u0631 \u0622\u0646 \u0634\u06cc \u062e\u0627\u0644\u06cc \u0628\u0627\u0634\u062f\u060c \u06a9\u0627\u0631\u0628\u0631 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0646\u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u0631\u0627\u0647 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u0646\u06cc\u0627\u0632 \u0628\u0647 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0648\u06cc routes \u0627\u06cc\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0622\u0646 \u0631\u0627 \u0628\u0647\u200c\u0639\u0646\u0648\u0627\u0646 \u0645\u06cc\u0627\u0646\u200c\u0627\u0641\u0632\u0627\u0631 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0646\u06cc\u062f\u060c \u06a9\u0647 \u0633\u067e\u0633 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0622\u0646 \u0631\u0627 \u0645\u0633\u062a\u0642\u06cc\u0645\u0627\u064b \u0628\u0647 \u0645\u0633\u06cc\u0631\u0647\u0627\u06cc\u06cc \u06a9\u0647 \u0628\u0627 \u0622\u0646 \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647\u200c\u0627\u0646\u062f \u0627\u0639\u0645\u0627\u0644 \u06a9\u0631\u062f <code>app<\/code> \u0647\u062f\u0641 &#8211; \u0634\u06cc:<\/p>\n<pre><code class=\"hljs\"><span class=\"hljs-keyword\">const<\/span> requireAuth = <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res, next<\/span>) =&gt;<\/span> {\n    <span class=\"hljs-keyword\">if<\/span> (req.user) {\n        next();\n    } <span class=\"hljs-keyword\">else<\/span> {\n        res.render(<span class=\"hljs-string\">'login'<\/span>, {\n            <span class=\"hljs-attr\">message<\/span>: <span class=\"hljs-string\">'Please login to continue'<\/span>,\n            <span class=\"hljs-attr\">messageClass<\/span>: <span class=\"hljs-string\">'alert-danger'<\/span>\n        });\n    }\n};\n\napp.get(<span class=\"hljs-string\">'\/protected'<\/span>, requireAuth, <span class=\"hljs-function\">(<span class=\"hljs-params\">req, res<\/span>) =&gt;<\/span> {\n    res.render(<span class=\"hljs-string\">'protected'<\/span>);\n});\n<\/code><\/pre>\n<p>\u0627\u0633\u062a\u0631\u0627\u062a\u0698\u06cc\u200c\u0647\u0627\u06cc \u0645\u062c\u0648\u0632 \u0631\u0627 \u0646\u06cc\u0632 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0627 \u062a\u062e\u0635\u06cc\u0635 \u0646\u0642\u0634\u200c\u0647\u0627 \u0628\u0647 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u0648 \u0633\u067e\u0633 \u0628\u0631\u0631\u0633\u06cc \u0645\u062c\u0648\u0632\u0647\u0627\u06cc \u0635\u062d\u06cc\u062d \u0642\u0628\u0644 \u0627\u0632 \u062f\u0633\u062a\u0631\u0633\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0628\u0647 \u0627\u06cc\u0646 \u0631\u0648\u0634 \u067e\u06cc\u0627\u062f\u0647\u200c\u0633\u0627\u0632\u06cc \u06a9\u0631\u062f. page.<\/p>\n<h2 id=\"conclusion\"><span class=\"ez-toc-section\" id=\"%d9%86%d8%aa%db%8c%d8%ac%d9%87\"><\/span>\u0646\u062a\u06cc\u062c\u0647<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 Express \u0628\u0633\u06cc\u0627\u0631 \u0633\u0627\u062f\u0647 \u0648 \u0633\u0631\u0631\u0627\u0633\u062a \u0627\u0633\u062a.  \u0645\u0627 \u0627\u0632 Node&#8217;s native \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0631\u062f\u0647 \u0627\u06cc\u0645 <code>crypto<\/code> \u0645\u0627\u0698\u0648\u0644 \u0628\u0631\u0627\u06cc \u0647\u0634 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062b\u0628\u062a \u0646\u0627\u0645 \u0634\u062f\u0647 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u06cc\u0698\u06af\u06cc \u0627\u06cc\u0645\u0646\u06cc \u0627\u0633\u0627\u0633\u06cc\u060c \u0648 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0645\u062d\u0627\u0641\u0638\u062a \u0634\u062f\u0647 \u0627\u0633\u062a page\u060c \u0641\u0642\u0637 \u0628\u0631\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0627 \u06cc\u06a9 \u062a\u0648\u06a9\u0646 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0634\u062f\u0647 \u0627\u0646\u062f \u0642\u0627\u0628\u0644 \u0645\u0634\u0627\u0647\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u06a9\u062f \u0645\u0646\u0628\u0639 \u0627\u06cc\u0646 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646 \u06cc\u0627\u0641\u062a \u0631\u0648\u06cc <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/github.com\/jkasun\/stack-abuse-express-authentication\">GitHub<\/a>.<\/p>\n<\/div>\n<p>    (\u0628\u0631\u0686\u0633\u0628\u200c\u0647\u0627 \u0628\u0631\u0627\u06cc \u062a\u0631\u062c\u0645\u0647)# \u062c\u0627\u0648\u0627 \u0627\u0633\u06a9\u0631\u06cc\u067e\u062a<br \/>\n<br \/><br \/>\n<br \/>\u0645\u0646\u062a\u0634\u0631 \u0634\u062f\u0647 \u062f\u0631 1403-01-23 09:15:03<br \/>\n<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-center kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;center&quot;,&quot;id&quot;:&quot;16310&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628&quot;,&quot;legend&quot;:&quot;0\\\/5 (0 \u0631\u0627\u06cc)&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;\u0645\u062f\u06cc\u0631\u06cc\u062a \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u062f\u0631 Express.js\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u0645 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 Express.js \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f.  \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0627\u0632 \u0628\u0631\u062e\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 ES6 \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u06af\u0631 \u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0641\u0646\u0627\u0648\u0631\u06cc \u0647\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0628\u0647 \u0634\u0645\u0627 \u06a9\u0645\u06a9 \u06a9\u0646\u062f.  \u0632\u0648\u062c...&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} ({count} \u0631\u0627\u06cc)&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-left: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            <span class=\"kksr-muted\">\u0627\u0645\u062a\u06cc\u0627\u0632 \u0634\u0645\u0627 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0637\u0644\u0628<\/span>\n    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">\u0632\u0645\u0627\u0646 \u0644\u0627\u0632\u0645 \u0628\u0631\u0627\u06cc \u0645\u0637\u0627\u0644\u0639\u0647: <\/span> <span class=\"rt-time\"> 7<\/span> <span class=\"rt-label rt-postfix\">\u062f\u0642\u06cc\u0642\u0647<\/span><\/span>\u0645\u0639\u0631\u0641\u06cc \u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0645\u0627 \u0642\u0635\u062f \u062f\u0627\u0631\u06cc\u0645 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0633\u0627\u062f\u0647 \u0628\u0633\u0627\u0632\u06cc\u0645 \u062a\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u06cc\u0645 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u0631\u0627 \u062f\u0631 Express.js \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0646\u06cc\u062f. \u0627\u0632 \u0622\u0646\u062c\u0627\u06cc\u06cc \u06a9\u0647 \u0645\u0627 \u0627\u0632 \u0628\u0631\u062e\u06cc \u062f\u0633\u062a\u0648\u0631\u0627\u062a \u0627\u0648\u0644\u06cc\u0647 ES6 \u0648 \u0686\u0627\u0631\u0686\u0648\u0628 \u0628\u0648\u062a \u0627\u0633\u062a\u0631\u067e \u0628\u0631\u0627\u06cc \u0637\u0631\u0627\u062d\u06cc \u0631\u0627\u0628\u0637 \u06a9\u0627\u0631\u0628\u0631\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f\u060c \u0627\u06af\u0631 \u062f\u0627\u0646\u0634 \u0627\u0648\u0644\u06cc\u0647 \u062f\u0631 \u0645\u0648\u0631\u062f \u0622\u0646 \u0641\u0646\u0627\u0648\u0631\u06cc \u0647\u0627 \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u06cc\u062f\u060c \u0645\u0645\u06a9\u0646 [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1772,620],"tags":[],"class_list":["post-16310","post","type-post","status-publish","format-standard","hentry","category-javascript","category-programming"],"acf":[],"_links":{"self":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/16310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/comments?post=16310"}],"version-history":[{"count":0,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/posts\/16310\/revisions"}],"wp:attachment":[{"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/media?parent=16310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/categories?post=16310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rasanegaar.com\/blog\/wp-json\/wp\/v2\/tags?post=16310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}