{"id":94929,"date":"2025-01-28T07:59:31","date_gmt":"2025-01-28T04:29:31","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/"},"modified":"2025-01-28T07:59:31","modified_gmt":"2025-01-28T04:29:31","slug":"automatically-send-user-data-to-database-with-clerk-oauth-f0p","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/","title":{"rendered":"\u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0628\u0627 Clerk OAuth \u0628\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u062f"},"content":{"rendered":"<div data-article-id=\"2245375\" id=\"article-body\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 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=\"Toggle Table of Content\"><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\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%86%DA%A9%D8%A7%D8%AA_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\" >\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\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:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%BE%DB%8C%D8%B4%DB%8C%D9%86%D9%87\" >\u067e\u06cc\u0634\u06cc\u0646\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:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7%DB%8C\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\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:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%A7%D8%AC%D8%B1%D8%A7\" >\u0645\u0631\u0627\u062d\u0644 \u0627\u062c\u0631\u0627<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#1_Ngrok_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\" >1. Ngrok \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#11_NGROK_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%D9%88_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\" >1.1 NGROK \u0631\u0627 \u0646\u0635\u0628 \u0648 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#12_URL_%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C_%D8%B1%D8%A7_%D8%A8%D8%AF%D8%B3%D8%AA_%D8%A2%D9%88%D8%B1%DB%8C%D8%AF\" >1.2 URL \u062e\u0627\u0631\u062c\u06cc \u0631\u0627 \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#ngrok_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >ngrok \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#2_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D9%86%D8%B4%DB%8C_%D8%B1%D8%A7_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >2. \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0647\u0627\u06cc \u0645\u0646\u0634\u06cc \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#21_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D8%A8%D9%87_%D8%AF%D8%A7%D8%B4%D8%A8%D9%88%D8%B1%D8%AF_%D9%85%D9%86%D8%B4%DB%8C\" >2.1 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#22_%DB%8C%DA%A9_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_Webhook_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\" >2.2 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Webhook \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#3_%D8%B1%D8%A7%D8%B2_%D8%A7%D9%85%D8%B6%D8%A7_%D8%B1%D8%A7_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF_envlocal\" >3. \u0631\u0627\u0632 \u0627\u0645\u0636\u0627 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f .env.local<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#4_%D9%85%D8%B3%DB%8C%D8%B1_Webhook_%D8%B1%D8%A7_%D8%B9%D9%85%D9%88%D9%85%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\" >4. \u0645\u0633\u06cc\u0631 Webhook \u0631\u0627 \u0639\u0645\u0648\u0645\u06cc \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#5_%D9%86%D8%B5%D8%A8_svix\" >5. \u0646\u0635\u0628 svix<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#6_%D9%85%D8%B3%DB%8C%D8%B1_API_Webhook_%D8%B1%D8%A7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\" >6. \u0645\u0633\u06cc\u0631 API Webhook \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#7_%D9%88%D8%A8_%D8%B1%D8%A7_%D8%AA%D8%B3%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\" >7. \u0648\u0628 \u0631\u0627 \u062a\u0633\u062a \u06a9\u0646\u06cc\u062f<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%86%DA%A9%D8%A7%D8%AA_%D8%A7%D8%B4%DA%A9%D8%A7%D9%84_%D8%B2%D8%AF%D8%A7%DB%8C%DB%8C\" >\u0646\u06a9\u0627\u062a \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D8%AD%D8%B0%D9%81_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%AF%D8%B1_%D9%85%D9%86%D8%B4%DB%8C\" >\u062d\u0630\u0641 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0645\u0646\u0634\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D8%A7%D8%B9%D8%B2%D8%A7%D9%85\" >\u0627\u0639\u0632\u0627\u0645<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/nabfollower.com\/blog\/automatically-send-user-data-to-database-with-clerk-oauth-f0p\/#%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\" >\u067e\u0627\u06cc\u0627\u0646<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%DA%A9%D8%A7%D8%AA_%DA%A9%D9%84%DB%8C%D8%AF%DB%8C\"><\/span>\n<p>  \u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>\u0628\u06cc\u0627\u0645\u0648\u0632\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 Webhooks Clerk \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u062f\u0631\u06a9 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0628 \u0633\u0627\u06cc\u062a \u0647\u0627\u06cc \u0645\u0646\u0634\u06cc \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0632 NGROK \u0628\u0631\u0627\u06cc \u0627\u0641\u0634\u0627\u06cc \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062e\u0627\u0631\u062c\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4%DB%8C%D9%86%D9%87\"><\/span>\n<p>  \u067e\u06cc\u0634\u06cc\u0646\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clerk OAuth \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u060c \u062a\u0634\u062e\u06cc\u0635 \u062b\u0628\u062a \u0646\u0627\u0645 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0686\u0627\u0644\u0634 \u0628\u0631\u0627\u0646\u06af\u06cc\u0632 \u0628\u0627\u0634\u062f. \u0628\u0631\u0627\u06cc \u067e\u0631\u062f\u0627\u062e\u062a\u0646 \u0628\u0647 \u0627\u06cc\u0646 \u0645\u0648\u0636\u0648\u0639 \u060c \u0645\u0627 \u0627\u0632 WebHooks Clerk \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u062f\u0627\u062f\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u067e\u0633 \u0627\u0632 \u062b\u0628\u062a \u0646\u0627\u0645 \u0628\u0647 \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u06cc\u0645. \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647 \u0645\u0631\u0627\u062d\u0644 \u0627\u062c\u0631\u0627\u06cc \u0631\u0627 \u0637\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7%DB%8C\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h2><span class=\"ez-toc-section\" id=\"%D9%85%D8%B1%D8%A7%D8%AD%D9%84_%D8%A7%D8%AC%D8%B1%D8%A7\"><\/span>\n<p>  \u0645\u0631\u0627\u062d\u0644 \u0627\u062c\u0631\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<h3><span class=\"ez-toc-section\" id=\"1_Ngrok_%D8%B1%D8%A7_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  1. Ngrok \u0631\u0627 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0633\u062a\u0646\u062f\u0627\u062a \u0645\u0646\u0634\u06cc \u062a\u0648\u0635\u06cc\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0627\u0632 NGROK \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f \u062a\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc WebHook \u0628\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u062d\u0644\u06cc \u0628\u0631\u0633\u062f.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"11_NGROK_%D8%B1%D8%A7_%D9%86%D8%B5%D8%A8_%D9%88_%D8%AA%D9%86%D8%B8%DB%8C%D9%85_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  1.1 NGROK \u0631\u0627 \u0646\u0635\u0628 \u0648 \u062a\u0646\u0638\u06cc\u0645 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u062f\u0631 \u0648\u0628 \u0633\u0627\u06cc\u062a \u0631\u0633\u0645\u06cc NGROK \u062b\u0628\u062a \u0646\u0627\u0645 \u06a9\u0646\u06cc\u062f \u0648 \u0645\u0631\u0627\u062d\u0644 \u0646\u0635\u0628 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0628\u062e\u0634 \u062a\u0646\u0638\u06cc\u0645 \u0648 \u0646\u0635\u0628 \u0631\u0627 \u062f\u0646\u0628\u0627\u0644 \u06a9\u0646\u06cc\u062f.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"12_URL_%D8%AE%D8%A7%D8%B1%D8%AC%DB%8C_%D8%B1%D8%A7_%D8%A8%D8%AF%D8%B3%D8%AA_%D8%A2%D9%88%D8%B1%DB%8C%D8%AF\"><\/span>\n<p>  1.2 URL \u062e\u0627\u0631\u062c\u06cc \u0631\u0627 \u0628\u062f\u0633\u062a \u0622\u0648\u0631\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0645\u062d\u0644\u06cc \u062e\u0648\u062f \u0631\u0627 \u0634\u0631\u0648\u0639 \u06a9\u0646\u06cc\u062f (<code>npm run dev<\/code>) \u060c \u0633\u067e\u0633 \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u062f<\/p>\n<p><code>ngrok http [Port]<\/code><\/p>\n<p>\u0645\u062b\u0627\u0644: \u062f\u0631 \u0645\u0648\u0631\u062f http: \/\/ localhost: 3000<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>ngrok http 3000\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>\u06a9\u067e\u06cc \u06a9\u0631\u062f\u0646 <code>Forwarding<\/code> URL \u0646\u0645\u0627\u06cc\u0634 \u062f\u0627\u062f\u0647 \u0645\u06cc \u0634\u0648\u062f.<br \/><\/p>\n<h4><span class=\"ez-toc-section\" id=\"ngrok_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  ngrok \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>NGROK \u0628\u0647 \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u0648\u0628 \u062f\u0631 \u062d\u0627\u0644 \u0627\u062c\u0631\u0627 \u0645\u062d\u0644\u06cc \u0627\u062c\u0627\u0632\u0647 \u0645\u06cc \u062f\u0647\u062f \u062a\u0627 \u0628\u0647 \u0637\u0648\u0631 \u0645\u0648\u0642\u062a \u0627\u0632 \u0637\u0631\u06cc\u0642 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0628\u0627\u0634\u062f. \u062f\u0631 \u0627\u06cc\u0646 \u062d\u0627\u0644\u062a \u060c \u0648\u0628 \u0633\u0627\u06cc\u062a \u0647\u0627\u06cc \u0645\u0646\u0634\u06cc \u0631\u0627 \u0642\u0627\u062f\u0631 \u0645\u06cc \u0633\u0627\u0632\u062f \u062a\u0627 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0647 \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u062a\u0648\u0633\u0639\u0647 \u0645\u062d\u0644\u06cc \u0627\u0631\u0633\u0627\u0644 \u06a9\u0646\u0646\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"2_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%D9%87%D8%A7%DB%8C_%D9%85%D9%86%D8%B4%DB%8C_%D8%B1%D8%A7_%D9%BE%DB%8C%DA%A9%D8%B1%D8%A8%D9%86%D8%AF%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2. \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0647\u0627\u06cc \u0645\u0646\u0634\u06cc \u0631\u0627 \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<h4><span class=\"ez-toc-section\" id=\"21_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%D8%A8%D9%87_%D8%AF%D8%A7%D8%B4%D8%A8%D9%88%D8%B1%D8%AF_%D9%85%D9%86%D8%B4%DB%8C\"><\/span>\n<p>  2.1 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>\u0628\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc \u0628\u0631\u0648\u06cc\u062f.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyrmb2mtfsy796uoibuco.png\" alt=\"\u062f\u06a9\u0645\u0647 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc\" loading=\"lazy\" width=\"800\" height=\"402\" title=\"\"><\/p>\n<h4><span class=\"ez-toc-section\" id=\"22_%DB%8C%DA%A9_%D9%86%D9%82%D8%B7%D9%87_%D9%BE%D8%A7%DB%8C%D8%A7%D9%86%DB%8C_Webhook_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  2.2 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc Webhook \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<ol>\n<li>\u062d\u0631\u06a9\u062a \u0628\u0647 <strong>\u0633\u0631\u0641\u0647 \u0647\u0627\u06cc \u0648\u0628<\/strong> \u0628\u0631\u06af\u0647 \u0648 \u06a9\u0644\u06cc\u06a9 \u06a9\u0646\u06cc\u062f <strong>\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc<\/strong>\u0628\u0634\u0631<br \/>\n<img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4cl44icjtewmh2wbqsm.png\" alt=\"\u0645\u0646\u0648\u06cc \u0633\u0645\u062a \u0645\u0646\u0634\u06cc\" loading=\"lazy\" width=\"418\" height=\"788\" title=\"\"><br \/>\n<img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv809et8hu4j1gvaanlkw.png\" alt=\"\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\" loading=\"lazy\" width=\"769\" height=\"606\" title=\"\">\n<\/li>\n<li>\u062a\u0646\u0638\u06cc\u0645 \u06a9\u0631\u062f\u0646 <strong>URL \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc<\/strong> \u0628\u0647 URL Forwarding Ngrok + <code>\/api\/webhooks\/user<\/code> (\u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0645\u062b\u0627\u0644 \u060c <code>https:\/\/example.ngrok-free.app\/api\/webhooks\/user<\/code>).<\/li>\n<li>\u062f\u0631 \u0635\u0648\u0631\u062a \u0644\u0632\u0648\u0645 \u062a\u0648\u0636\u06cc\u062d\u06cc \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0645\u0634\u062a\u0631\u06a9 \u0634\u062f\u0646 \u062f\u0631 <strong>\u06a9\u0627\u0631\u0628\u0631.<\/strong> \u0631\u0648\u06cc\u062f\u0627\u062f<\/li>\n<li>\u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0646 <strong>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0646<\/strong>\u0628\u0634\u0631<br \/>\n<img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbatj22ml01ondga2gtg6.png\" alt=\"\u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc\" loading=\"lazy\" width=\"753\" height=\"954\" title=\"\">\n<\/li>\n<\/ol>\n<h3><span class=\"ez-toc-section\" id=\"3_%D8%B1%D8%A7%D8%B2_%D8%A7%D9%85%D8%B6%D8%A7_%D8%B1%D8%A7_%D8%A7%D8%B6%D8%A7%D9%81%D9%87_%DA%A9%D9%86%DB%8C%D8%AF_envlocal\"><\/span>\n<p>  3. \u0631\u0627\u0632 \u0627\u0645\u0636\u0627 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f <code>.env.local<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0635\u0641\u062d\u0647 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u0646\u0642\u0637\u0647 \u0627\u0646\u062a\u0647\u0627\u06cc\u06cc \u060c \u0631\u0627\u0632 \u0627\u0645\u0636\u0627 \u0631\u0627 \u0627\u0632 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Webhook \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frcoqvs6g71yg91j4kru1.png\" alt=\"\u0631\u0627\u0632 \u0627\u0645\u0636\u0627 \u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"723\" title=\"\"><br \/>Signing Secret \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f \u060c \u0645\u0627\u0646\u0646\u062f <code>SIGNING_SECRET=whsec_123<\/code>\u060c \u0628\u0647 \u0634\u0645\u0627 <code>.env.local<\/code> \u067e\u0631\u0648\u0646\u062f\u0647 \u060c \u06a9\u0647 \u0627\u0632 \u0642\u0628\u0644 \u0628\u0627\u06cc\u062f \u0634\u0627\u0645\u0644 \u06a9\u0644\u06cc\u062f\u0647\u0627\u06cc API Clerk \u0648 URL DB \u0634\u0645\u0627 \u0628\u0627\u0634\u062f.<br \/>\u067e\u0631\u0648\u0646\u062f\u0647 \u0628\u0627\u06cc\u062f \u0634\u0628\u0627\u0647\u062a \u062f\u0627\u0634\u062a\u0647 \u0628\u0627\u0634\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight plaintext\"><code>DATABASE_URL=postgresql:\/\/database_url\nNEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_YXdha2Utb3gtODUuY2xlcmsuYWNjb3VudHMuZGV2JA\nCLERK_SECRET_KEY=sk_test_5DbmoNJeli74tMRgtzZLBY4SC6gpTLbNGnvAPeWJkE\nSIGNING_SECRET=whsec_123\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<h3><span class=\"ez-toc-section\" id=\"4_%D9%85%D8%B3%DB%8C%D8%B1_Webhook_%D8%B1%D8%A7_%D8%B9%D9%85%D9%88%D9%85%DB%8C_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  4. \u0645\u0633\u06cc\u0631 Webhook \u0631\u0627 \u0639\u0645\u0648\u0645\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u062f\u0631 \u0635\u0648\u0631\u062a \u0627\u0633\u062a\u0641\u0627\u062f\u0647 <code>clerkMiddleware()<\/code>\u060c \u0627\u0637\u0645\u06cc\u0646\u0627\u0646 \u062d\u0627\u0635\u0644 \u06a9\u0646\u06cc\u062f <code>\/api\/webhooks(.*)<\/code> \u0639\u0645\u0648\u0645\u06cc \u0627\u0633\u062a \u0628\u0631\u0627\u06cc \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u062f\u0631 \u0645\u0648\u0631\u062f \u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u0633\u06cc\u0631\u0647\u0627 \u060c \u0628\u0647 \u0631\u0627\u0647\u0646\u0645\u0627\u06cc ClerkMiddleware () \u0645\u0631\u0627\u062c\u0639\u0647 \u06a9\u0646\u06cc\u062f.<\/p>\n<h3><span class=\"ez-toc-section\" id=\"5_%D9%86%D8%B5%D8%A8_svix\"><\/span>\n<p>  5. \u0646\u0635\u0628 <code>svix<\/code><br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0645\u0646\u0634\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>svix<\/code> \u0628\u0631\u0627\u06cc \u0627\u0631\u0633\u0627\u0644 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc WebHook \u0627\u0645\u0636\u0627 \u0634\u062f\u0647. \u0646\u0635\u0628 \u0622\u0646:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>npm <span class=\"nb\">install <\/span>svix\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<h3><span class=\"ez-toc-section\" id=\"6_%D9%85%D8%B3%DB%8C%D8%B1_API_Webhook_%D8%B1%D8%A7_%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  6. \u0645\u0633\u06cc\u0631 API Webhook \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0646 <code>\/src\/app\/api\/webhooks\/user\/route.ts<\/code> \u0628\u0631\u0627\u06cc \u062f\u0631\u06cc\u0627\u0641\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0647\u0627\u06cc Webhook:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">NextResponse<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">next\/server<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Pool<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">pg<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">Webhook<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">svix<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">headers<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">next\/headers<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">import<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">WebhookEvent<\/span> <span class=\"p\">}<\/span> <span class=\"k\">from<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">@clerk\/nextjs\/server<\/span><span class=\"dl\">'<\/span><span class=\"p\">;<\/span>\n\n<span class=\"c1\">\/\/ Initialize Neon DB connection<\/span>\n<span class=\"kd\">const<\/span> <span class=\"nx\">pool<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Pool<\/span><span class=\"p\">({<\/span>\n  <span class=\"na\">connectionString<\/span><span class=\"p\">:<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">DATABASE_URL<\/span><span class=\"p\">,<\/span> <span class=\"c1\">\/\/ Add to .env<\/span>\n<span class=\"p\">});<\/span>\n\n<span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">POST<\/span><span class=\"p\">(<\/span><span class=\"nx\">req<\/span><span class=\"p\">:<\/span> <span class=\"nx\">Request<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">SIGNING_SECRET<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">process<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">.<\/span><span class=\"nx\">SIGNING_SECRET<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">SIGNING_SECRET<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">throw<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Error<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Error: Please add SIGNING_SECRET from Clerk Dashboard to .env or .env.local<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Create new Svix instance with secret<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">wh<\/span> <span class=\"o\">=<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Webhook<\/span><span class=\"p\">(<\/span><span class=\"nx\">SIGNING_SECRET<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ Get headers<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">headerPayload<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nf\">headers<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">svix_id<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">headerPayload<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">svix-id<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">svix_timestamp<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">headerPayload<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">svix-timestamp<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">svix_signature<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">headerPayload<\/span><span class=\"p\">.<\/span><span class=\"nf\">get<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">svix-signature<\/span><span class=\"dl\">'<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"c1\">\/\/ If there are no headers, error out<\/span>\n  <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"o\">!<\/span><span class=\"nx\">svix_id<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">svix_timestamp<\/span> <span class=\"o\">||<\/span> <span class=\"o\">!<\/span><span class=\"nx\">svix_signature<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Error: Missing Svix headers<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n      <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">400<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Get body<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">payload<\/span> <span class=\"o\">=<\/span> <span class=\"k\">await<\/span> <span class=\"nx\">req<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">();<\/span>\n  <span class=\"kd\">const<\/span> <span class=\"nx\">body<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">JSON<\/span><span class=\"p\">.<\/span><span class=\"nf\">stringify<\/span><span class=\"p\">(<\/span><span class=\"nx\">payload<\/span><span class=\"p\">);<\/span>\n\n  <span class=\"kd\">let<\/span> <span class=\"nx\">evt<\/span><span class=\"p\">:<\/span> <span class=\"nx\">WebhookEvent<\/span><span class=\"p\">;<\/span>\n\n  <span class=\"c1\">\/\/ Verify payload with headers<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">evt<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">wh<\/span><span class=\"p\">.<\/span><span class=\"nf\">verify<\/span><span class=\"p\">(<\/span><span class=\"nx\">body<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n      <span class=\"dl\">'<\/span><span class=\"s1\">svix-id<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span> <span class=\"nx\">svix_id<\/span><span class=\"p\">,<\/span>\n      <span class=\"dl\">'<\/span><span class=\"s1\">svix-timestamp<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span> <span class=\"nx\">svix_timestamp<\/span><span class=\"p\">,<\/span>\n      <span class=\"dl\">'<\/span><span class=\"s1\">svix-signature<\/span><span class=\"dl\">'<\/span><span class=\"p\">:<\/span> <span class=\"nx\">svix_signature<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">})<\/span> <span class=\"k\">as<\/span> <span class=\"nx\">WebhookEvent<\/span><span class=\"p\">;<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">err<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Error: Could not verify webhook:<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">err<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"k\">new<\/span> <span class=\"nc\">Response<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Error: Verification error<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"p\">{<\/span>\n      <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">400<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">});<\/span>\n  <span class=\"p\">}<\/span>\n\n  <span class=\"c1\">\/\/ Handling the user.created event (modify as needed)<\/span>\n  <span class=\"k\">try<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">if <\/span><span class=\"p\">(<\/span><span class=\"nx\">evt<\/span><span class=\"p\">.<\/span><span class=\"kd\">type<\/span> <span class=\"o\">===<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">user.created<\/span><span class=\"dl\">'<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n      <span class=\"kd\">const<\/span> <span class=\"p\">{<\/span> <span class=\"nx\">id<\/span> <span class=\"p\">}<\/span> <span class=\"o\">=<\/span> <span class=\"nx\">evt<\/span><span class=\"p\">.<\/span><span class=\"nx\">data<\/span><span class=\"p\">;<\/span>\n      <span class=\"c1\">\/\/ Insert user into Neon DB<\/span>\n      <span class=\"k\">await<\/span> <span class=\"nx\">pool<\/span><span class=\"p\">.<\/span><span class=\"nf\">query<\/span><span class=\"p\">(<\/span>\n        <span class=\"s2\">`INSERT INTO users (user_id) VALUES ($1) \n        ON CONFLICT (user_id) DO NOTHING`<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">[<\/span><span class=\"nx\">id<\/span><span class=\"p\">]<\/span>\n      <span class=\"p\">);<\/span>\n      <span class=\"k\">return<\/span> <span class=\"nx\">NextResponse<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">({<\/span> <span class=\"na\">message<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">User saved to DB<\/span><span class=\"dl\">'<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span> <span class=\"p\">});<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">return<\/span> <span class=\"nx\">NextResponse<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">({<\/span> <span class=\"na\">message<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Unhandled event<\/span><span class=\"dl\">'<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">200<\/span> <span class=\"p\">});<\/span>\n  <span class=\"p\">}<\/span> <span class=\"k\">catch <\/span><span class=\"p\">(<\/span><span class=\"nx\">error<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nx\">console<\/span><span class=\"p\">.<\/span><span class=\"nf\">error<\/span><span class=\"p\">(<\/span><span class=\"dl\">'<\/span><span class=\"s1\">Webhook Error:<\/span><span class=\"dl\">'<\/span><span class=\"p\">,<\/span> <span class=\"nx\">error<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">return<\/span> <span class=\"nx\">NextResponse<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">({<\/span> <span class=\"na\">error<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">Internal Server Error<\/span><span class=\"dl\">'<\/span> <span class=\"p\">},<\/span> <span class=\"p\">{<\/span> <span class=\"na\">status<\/span><span class=\"p\">:<\/span> <span class=\"mi\">500<\/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<h3><span class=\"ez-toc-section\" id=\"7_%D9%88%D8%A8_%D8%B1%D8%A7_%D8%AA%D8%B3%D8%AA_%DA%A9%D9%86%DB%8C%D8%AF\"><\/span>\n<p>  7. \u0648\u0628 \u0631\u0627 \u062a\u0633\u062a \u06a9\u0646\u06cc\u062f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<ol>\n<li>\u062f\u0631 \u062a\u0646\u0638\u06cc\u0645\u0627\u062a Webhook \u0645\u0646\u0634\u06cc \u060c \u0628\u0647 <strong>\u062a\u0633\u062a<\/strong>\u0628\u0634\u0631<\/li>\n<li>\u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0646 <strong>\u06a9\u0627\u0631\u0628\u0631.<\/strong> \u0627\u0632 <strong>\u0627\u0631\u0633\u0627\u0644 \u0631\u0648\u06cc\u062f\u0627\u062f<\/strong>\u0628\u0634\u0631<br \/>\n<img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pplbkgzex2q7cfvptyy.png\" alt=\"\u062a\u0633\u062a\" loading=\"lazy\" width=\"751\" height=\"504\" title=\"\">\n<\/li>\n<li>\u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0646 <strong>\u0627\u0631\u0633\u0627\u0644 \u0645\u062b\u0627\u0644<\/strong>\u0628\u0634\u0631<\/li>\n<li>\u0627\u06af\u0631 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u0648\u0641\u0642 \u0634\u0648\u062f \u060c \u0628\u0647 \u0635\u0648\u0631\u062a \u0645\u0634\u062e\u0635 \u0645\u06cc \u0634\u0648\u062f <strong>\u0645\u0648\u0641\u0642 \u0634\u062f<\/strong> \u062f\u0631 <strong>\u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645<\/strong><br \/>\n<img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzfl514ad6j9kq64cg49v.png\" alt=\"\u062a\u0644\u0627\u0634 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u0645\" loading=\"lazy\" width=\"700\" height=\"193\" title=\"\">\n<\/li>\n<\/ol>\n<p>\u0628\u0646\u0627\u0628\u0631\u0627\u06cc\u0646 \u0628\u0631\u0646\u0627\u0645\u0647 \u0634\u0645\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u0637\u0648\u0631 \u062e\u0648\u062f\u06a9\u0627\u0631 \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062d\u062a\u06cc \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 OAuth Clerk \u062b\u0628\u062a \u06a9\u0646\u062f. \u0644\u0637\u0641\u0627\u064b \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u062c\u062f\u06cc\u062f \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062b\u0628\u062a \u06a9\u0646\u06cc\u062f \u062a\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u062f \u06a9\u0647 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%DA%A9%D8%A7%D8%AA_%D8%A7%D8%B4%DA%A9%D8%A7%D9%84_%D8%B2%D8%AF%D8%A7%DB%8C%DB%8C\"><\/span>\n<p>  \u0646\u06a9\u0627\u062a \u0627\u0634\u06a9\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0628\u0627 \u0645\u0634\u06a9\u0644\u0627\u062a \u0631\u0648\u0628\u0631\u0648 \u0634\u062f\u06cc\u062f:<\/p>\n<ul>\n<li>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u0645\u06cc\u0627\u0646 \u0627\u0641\u0632\u0627\u0631 \u062e\u0648\u062f \u0631\u0627 \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<\/li>\n<li>\u067e\u06cc\u06a9\u0631\u0628\u0646\u062f\u06cc \u062e\u0648\u062f \u0631\u0627 \u062f\u0631 \u062f\u0627\u0634\u0628\u0648\u0631\u062f \u0645\u0646\u0634\u06cc \u0628\u0631\u0631\u0633\u06cc \u06a9\u0646\u06cc\u062f<br \/>\n[For example]\n\u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc: \/src \/app*<em>\/api\/webhooks\/user\/route.ts<\/em>* \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u0631 \u0645\u0646\u0634\u06cc: http: \/\/ &#8230;<strong>\/API\/Webhooks\/\u06a9\u0627\u0631\u0628\u0631<\/strong>\n<\/li>\n<li>\u0645\u0633\u06cc\u0631 \u06a9\u0646\u062a\u0631\u0644 \u0645\u0633\u06cc\u0631 \u06cc\u0627 API \u0631\u0627 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u062f (\u0628\u0647 \u062f\u0646\u0628\u0627\u0644 \u0631\u0627\u0647\u0646\u0645\u0627) 1. \u06cc\u06a9 \u0645\u0633\u06cc\u0631 \u0622\u0632\u0645\u0627\u06cc\u0634 \u0631\u0627 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f:<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frl7d74l61bcs7gxmfdua.png\" alt=\"\u0645\u0633\u06cc\u0631 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc\" loading=\"lazy\" width=\"800\" height=\"262\" title=\"\"><br \/>\u25bd \u0628\u0631\u0646\u0627\u0645\u0647\/\u0648\u0628 \u0633\u0627\u06cc\u062a\/\u062a\u0633\u062a\/\u0645\u0633\u06cc\u0631.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight typescript\"><code><span class=\"k\">export<\/span> <span class=\"k\">async<\/span> <span class=\"kd\">function<\/span> <span class=\"nf\">POST<\/span><span class=\"p\">()<\/span> <span class=\"p\">{<\/span>\n  <span class=\"k\">return<\/span> <span class=\"nx\">Response<\/span><span class=\"p\">.<\/span><span class=\"nf\">json<\/span><span class=\"p\">({<\/span> <span class=\"na\">message<\/span><span class=\"p\">:<\/span> <span class=\"dl\">'<\/span><span class=\"s1\">The route is working<\/span><span class=\"dl\">'<\/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>2. \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.<br \/>3. \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>curl<\/code> \u0628\u0631\u0627\u06cc \u0622\u0632\u0645\u0648\u0646:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>curl <span class=\"nt\">-H<\/span> <span class=\"s1\">'Content-Type: application\/json'<\/span> <span class=\"nt\">-X<\/span> POST\nhttp:\/\/localhost:3000\/api\/webhooks\/test\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>4. \u0627\u06af\u0631 &#8220;\u067e\u06cc\u0627\u0645&#8221; \u0631\u0627 \u0645\u0634\u0627\u0647\u062f\u0647 \u06a9\u0646\u06cc\u062f: &#8220;\u0645\u0633\u06cc\u0631 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f&#8221;} \u060c \u0633\u067e\u0633 \u06a9\u0646\u062a\u0631\u0644 \u06a9\u0646\u0646\u062f\u0647 \u0627\u0635\u0644\u06cc \u0645\u0633\u06cc\u0631 \u06a9\u0627\u0631 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0622\u0645\u0627\u062f\u0647 \u0633\u0627\u062e\u062a \u0627\u0633\u062a.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AD%D8%B0%D9%81_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1_%D8%AF%D8%B1_%D9%85%D9%86%D8%B4%DB%8C\"><\/span>\n<p>  \u062d\u0630\u0641 \u06a9\u0627\u0631\u0628\u0631 \u062f\u0631 \u0645\u0646\u0634\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06af\u0631 \u0645\u06cc \u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u0637\u0644\u0627\u0639\u0627\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u062f\u0631 \u0645\u0648\u0631\u062f \u0645\u0646\u0634\u06cc \u062d\u0630\u0641 \u06a9\u0646\u06cc\u062f \u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0631\u0627 \u0627\u0632 \u0628\u0631\u06af\u0647 &#8220;\u06a9\u0627\u0631\u0628\u0631&#8221; \u0627\u0646\u062c\u0627\u0645 \u062f\u0647\u06cc\u062f.<br \/><img decoding=\"async\" src=\"https:\/\/media2.dev.to\/dynamic\/image\/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto\/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ahdb5oa7ti4k8uybda2.png\" alt=\"\u0632\u0628\u0627\u0646\u0647 \u06a9\u0627\u0631\u0628\u0631\" loading=\"lazy\" width=\"800\" height=\"192\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A7%D8%B9%D8%B2%D8%A7%D9%85\"><\/span>\n<p>  \u0627\u0639\u0632\u0627\u0645<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ol>\n<li>URL Webhook \u0631\u0627 \u062f\u0631 \u0645\u0646\u0634\u06cc \u0628\u0627 \u062f\u0627\u0645\u0646\u0647 \u062a\u0648\u0644\u06cc\u062f \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f.<\/li>\n<li>\u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 <strong>\u0631\u0627\u0632 \u0627\u0645\u0636\u0627\u0621<\/strong> \u0628\u0647 \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637 \u062a\u0648\u0644\u06cc\u062f.<\/li>\n<li>\u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0645\u0633\u062a\u0642\u0631 \u06a9\u0646\u06cc\u062f.<\/li>\n<\/ol>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%D8%A7%DB%8C%D8%A7%D9%86\"><\/span>\n<p>  \u067e\u0627\u06cc\u0627\u0646<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Webhooks Clerk \u0627\u0645\u06a9\u0627\u0646 \u062a\u0634\u062e\u06cc\u0635 \u0632\u0645\u0627\u0646 \u0648\u0627\u0642\u0639\u06cc \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062c\u062f\u06cc\u062f \u0631\u0627 \u0641\u0631\u0627\u0647\u0645 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>NGROK \u0628\u0627 \u0642\u0631\u0627\u0631 \u062f\u0627\u062f\u0646 \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u060c \u0622\u0632\u0645\u0627\u06cc\u0634 \u0648\u0628 \u0645\u062d\u0644\u06cc \u0631\u0627 \u0627\u0645\u06a9\u0627\u0646 \u067e\u0630\u06cc\u0631 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<li>\u0627\u062c\u0631\u0627 \u06a9\u0646\u0646\u062f\u0647 <code>svix<\/code> \u062a\u0623\u06cc\u06cc\u062f \u0648 \u0627\u0645\u0646\u06cc\u062a \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0631\u0627 \u062a\u0636\u0645\u06cc\u0646 \u0645\u06cc \u06a9\u0646\u062f.<\/li>\n<\/ul><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0646\u06a9\u0627\u062a \u06a9\u0644\u06cc\u062f\u06cc \u0628\u06cc\u0627\u0645\u0648\u0632\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0627\u0632 Webhooks Clerk \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u062f\u0631\u06a9 \u06a9\u0646\u06cc\u062f \u06a9\u0647 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u0648\u0628 \u0633\u0627\u06cc\u062a \u0647\u0627\u06cc \u0645\u0646\u0634\u06cc \u0631\u0627 \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u062f. \u0627\u0632 NGROK \u0628\u0631\u0627\u06cc \u0627\u0641\u0634\u0627\u06cc \u06cc\u06a9 \u0646\u0642\u0637\u0647 \u067e\u0627\u06cc\u0627\u0646\u06cc \u0645\u062d\u0644\u06cc \u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u062e\u0627\u0631\u062c\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u062f. \u067e\u06cc\u0634\u06cc\u0646\u0647 \u0647\u0646\u06af\u0627\u0645 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 Clerk OAuth \u0628\u0631\u0627\u06cc \u062a\u0623\u06cc\u06cc\u062f \u0627\u0639\u062a\u0628\u0627\u0631 \u06a9\u0627\u0631\u0628\u0631 \u060c \u062a\u0634\u062e\u06cc\u0635 \u062b\u0628\u062a \u0646\u0627\u0645 \u0647\u0627\u06cc \u062c\u062f\u06cc\u062f \u06a9\u0627\u0631\u0628\u0631 \u0627\u0632 \u0628\u0631\u0646\u0627\u0645\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":94931,"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-94929","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\/94929","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=94929"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/94929\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/94931"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=94929"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=94929"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=94929"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}