اگه Cursor Pro میخواید، این ریپو عالیه :))) راضیم ازش.
https://github.com/kingparks/cursor-vip
@DevTwitter | <Pedram/>
https://github.com/kingparks/cursor-vip
@DevTwitter | <Pedram/>
👍23❤8👎4🔥1
یک پروژه open source برای راهاندازی محیط RAG بصورت لوکال و چت با هر نوع داکیومنت متنی، سازگار با انواع مدلهای موجود آفلاین با سرور ollama و آنلاین با API
https://cinnamon.github.io/kotaemon/
@DevTwitter | <Ehsan Azhdari/>
https://cinnamon.github.io/kotaemon/
@DevTwitter | <Ehsan Azhdari/>
❤19👍6🔥1
یک ریپازیتوری تحلیل داده دیگه آماده کردم از تعاملات در شبکه های اجتماعی
اگر دارید در حوزه دیتا آنالیست کار میکنید / یاد میگیرید این ریپازیتوری بهتون کمک میکنه
اگر هم قابل بود استار کنید
https://github.com/MisaghMomeniB/Social-Engagement-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
اگر دارید در حوزه دیتا آنالیست کار میکنید / یاد میگیرید این ریپازیتوری بهتون کمک میکنه
اگر هم قابل بود استار کنید
https://github.com/MisaghMomeniB/Social-Engagement-Analysis
@DevTwitter | <Misagh Momeni Bashusqeh/>
👍13🔥6👎1
خیلی وقته که دارم روی یک پکیج متن باز کار میکنم که یه سری قابلیتها رو به فونتها اضافه کنه که بتونم ابزارهای مخصوص به ساخت فونت فارسی رو از این طریق توسعه بدم. خیلی خام هست ولی چون خیلی براش تست نوشتم دارم بهش بیشتر امیدوار میشم.
https://github.com/typoman/RoboFontGadgets
@DevTwitter | <بهمن/>
https://github.com/typoman/RoboFontGadgets
@DevTwitter | <بهمن/>
❤21👍11🔥2
بالاخره رابط کاربری خط فرمان (cli) خودم رو ساختم. خیلی ساده و دم دستی. خیلی ازش راضی هستم. چیزهایی که توی پایتون بلد نبودم و یادم نمیموند رو میاره دم دستم.
دوست دارید ببینید و نظرتون رو بگید.
https://github.com/mohsen12999/my-python-cli
@DevTwitter | <Mohsen Shabanian/>
دوست دارید ببینید و نظرتون رو بگید.
https://github.com/mohsen12999/my-python-cli
@DevTwitter | <Mohsen Shabanian/>
🔥24👍8👎2
تو پروژههای مختلف خیلی پیش میاد که هعی RAG استفاده بشه. یه سرویس کوچولوی سبک نقلی زدم که لازم نباشه هر سری RAG بنویسیم:
https://github.com/m-hoseyny/rag-aas
@DevTwitter | <Amjad!/>
https://github.com/m-hoseyny/rag-aas
@DevTwitter | <Amjad!/>
👍19🔥5👎1
تمپلیت ناکست برای Telegram Mini App
یه سری تغییر باید توی فایل جی اسی که استفاده میکنید برای مینی اپ بدید، که ردیفش کردم و به عنوان تمپلیت براش ریپو ساختم.
https://github.com/blackestwhite/nuxt-telegram-mini-app-template
@DevTwitter | <Mahdi Akbari/>
یه سری تغییر باید توی فایل جی اسی که استفاده میکنید برای مینی اپ بدید، که ردیفش کردم و به عنوان تمپلیت براش ریپو ساختم.
https://github.com/blackestwhite/nuxt-telegram-mini-app-template
@DevTwitter | <Mahdi Akbari/>
❤24👍9
خب وقتشه از پورتفولیو خودم رو نمایی کنم.صفرتا صد کدشو با vanilla js زدم.
اگ یکم کثیفه به بزرگی خودتون ببخشید من تو فرانت خیلی جونیورم.
لینک دمو : https://srwuix.ir
لینک ریپازیتوری:
https://github.com/srwuix/srwuix.github.io.git
بهتون اجازه میدم از این قالب استفاده کنید برا پورتفولیو خودتون
@DevTwitter | <اراجیف ذهن گوربا/>
اگ یکم کثیفه به بزرگی خودتون ببخشید من تو فرانت خیلی جونیورم.
لینک دمو : https://srwuix.ir
لینک ریپازیتوری:
https://github.com/srwuix/srwuix.github.io.git
بهتون اجازه میدم از این قالب استفاده کنید برا پورتفولیو خودتون
@DevTwitter | <اراجیف ذهن گوربا/>
❤52👎38👍19🔥1
اگر دارید C++ یاد میگیرید و نیاز دارید پروژه های تمرینی داشته باشید و کار کنید
یک پروژه مبتدی مدریت فایل رو نوشتم که میتونید دسترسی به سورس اش داشته باشید
https://github.com/MisaghMomeniB/File-Manager-Cpp
@DevTwitter | <Misagh Momeni Bashusqeh/>
یک پروژه مبتدی مدریت فایل رو نوشتم که میتونید دسترسی به سورس اش داشته باشید
https://github.com/MisaghMomeniB/File-Manager-Cpp
@DevTwitter | <Misagh Momeni Bashusqeh/>
❤26👍7👎3
#کوته_نیوز
لاراول 12 ول داده شد.
گفتن که این نسخه دولوپر دوستترین نسخهی لاراوله و کمترین تغییرات مخرب رو داره.
Laravel-12.0.0-no_begaei
@DevTwitter
لاراول 12 ول داده شد.
گفتن که این نسخه دولوپر دوستترین نسخهی لاراوله و کمترین تغییرات مخرب رو داره.
Laravel-12.0.0-no_begaei
@DevTwitter
🔥58👍9❤5👎4
اگر همیشه دنبال لینکها و بوکمارکها توی پروژهها یا زندگی شخصیتون میگردید، Linkcovery رو چک کنید!
یه ابزار ساده و کاربردی برای مطالعه و ذخیره لینکها که کمک میکنه همه چی رو مرتب و سریع پیدا کنید!
کدها رو ببینید و استفاده کنید:
GitHub
PyPI
https://github.com/arian24b/linkcovery
https://pypi.org/project/linkcovery/
@DevTwitter | <𝓐𝓻𝓲𝓪𝓷/>
یه ابزار ساده و کاربردی برای مطالعه و ذخیره لینکها که کمک میکنه همه چی رو مرتب و سریع پیدا کنید!
کدها رو ببینید و استفاده کنید:
GitHub
PyPI
https://github.com/arian24b/linkcovery
https://pypi.org/project/linkcovery/
@DevTwitter | <𝓐𝓻𝓲𝓪𝓷/>
👍15
بهترین یوتوبر برنامه نویسی (پایتون) به نظرم آریان هست، سطح علمی و تجربه به شدت بالا هم توی پایتون هم زبانهای دیگه که به پایتون بسط میده، قدرت انتقال مفاهیمش خیلی قویه، تاپیکهایی رو میگه که هیچ جای دیگه نمیگن، معماری کدهاش به شدت زیباست و از همه مهمتر خوشتیپ و هلندی هست!
youtube.com/arjancodes
@DevTwitter | <Boby Cloud/>
youtube.com/arjancodes
@DevTwitter | <Boby Cloud/>
👎64👍39❤11
انگولار اول بهعنوان یه آزمایش داخلی تو گوگل شروع شد – حتی اولش جیمیل و گوگل مپ هم جدی نگرفتنش. اما خیلی زود تبدیل به یه پدیده تو دنیای جاوااسکریپت شد.
http://youtube.com/post/UgkxCEPPeUZNnEYxoRli-I2tNHV57kFqINI7?si=2LM_g8n9jQHHJjr0
@DevTwitter | <Ahmadreza Shamimi/>
http://youtube.com/post/UgkxCEPPeUZNnEYxoRli-I2tNHV57kFqINI7?si=2LM_g8n9jQHHJjr0
@DevTwitter | <Ahmadreza Shamimi/>
👍28👎23❤1
ماجرای یه SELECT ساده که SQL SERVER رو به زانو در آورد.
چند وقت پیش تو یه پروژه ای بودم که یکی از دولوپرهای عزیز یه گزارش جدید نوشته بود که شامل یه Query بود. روی سطح کد، همهچیز عالی به نظر میومد. اما وقتی گزارش اجرا میشد، سیستم یه دفعه شروع می کرد به کند شدن و سرور، CPU رو تا 100٪ میبرد بالا.
رفتم بررسی کنم چی شده. دیدم Queryش این شکلی بود:
کاری که این Query انجام میداد، این بود که یه فانکشن روی ستون اجرا میکرد. نتیجه؟ بهجای استفاده از ایندکسهای موجود، SQL Server مجبور میشد کل جدول رو اسکن کنه (Full Table Scan).
اول، با دولوپر صحبت کردم و براش توضیح دادم که استفاده از فانکشن روی ستونها (بهخصوص توی WHERE یا JOIN) باعث میشه SQL Server ایندکسها رو نادیده بگیره. بعد، بهش پیشنهاد دادم که بهجای فانکشن، مقدار محاسبهشده رو از قبل توی یه ستون جدید ذخیره کنه یا از Persisted Computed Column استفاده کنه.
کوئری اصلاح شدهش این شد:
سرعت اجرای Query از چند دقیقه به کمتر از یک ثانیه رسید. همین تغییر ساده کلی بار روی دیتابیس رو کم کرد. نتیجه اینکه من راضی ، دولوپر راضی ، SQL SERVER هم راضی.
@DevTwitter | <Mostafa Hassanzadeh/>
چند وقت پیش تو یه پروژه ای بودم که یکی از دولوپرهای عزیز یه گزارش جدید نوشته بود که شامل یه Query بود. روی سطح کد، همهچیز عالی به نظر میومد. اما وقتی گزارش اجرا میشد، سیستم یه دفعه شروع می کرد به کند شدن و سرور، CPU رو تا 100٪ میبرد بالا.
رفتم بررسی کنم چی شده. دیدم Queryش این شکلی بود:
SELECT *
FROM BigTable
WHERE FunctionOnColumn(SomeColumn) = 'Value';
کاری که این Query انجام میداد، این بود که یه فانکشن روی ستون اجرا میکرد. نتیجه؟ بهجای استفاده از ایندکسهای موجود، SQL Server مجبور میشد کل جدول رو اسکن کنه (Full Table Scan).
اول، با دولوپر صحبت کردم و براش توضیح دادم که استفاده از فانکشن روی ستونها (بهخصوص توی WHERE یا JOIN) باعث میشه SQL Server ایندکسها رو نادیده بگیره. بعد، بهش پیشنهاد دادم که بهجای فانکشن، مقدار محاسبهشده رو از قبل توی یه ستون جدید ذخیره کنه یا از Persisted Computed Column استفاده کنه.
کوئری اصلاح شدهش این شد:
SELECT *
FROM BigTable
WHERE CalculatedSomeColumn = 'Value';
سرعت اجرای Query از چند دقیقه به کمتر از یک ثانیه رسید. همین تغییر ساده کلی بار روی دیتابیس رو کم کرد. نتیجه اینکه من راضی ، دولوپر راضی ، SQL SERVER هم راضی.
@DevTwitter | <Mostafa Hassanzadeh/>
❤109👍45🔥6
آقا خیلی من ازین api platform خوشم اومده.
استاندارد، کامل، بدون اضافه کاری، داکیومنت کافی و عالی.
انگار فست ایپیآی phpهاست
https://api-platform.com/docs/symfony/
@DevTwitter | <Saman/>
استاندارد، کامل، بدون اضافه کاری، داکیومنت کافی و عالی.
انگار فست ایپیآی phpهاست
https://api-platform.com/docs/symfony/
@DevTwitter | <Saman/>
👍27🔥7
چطوری تو git بفهمیم مقصر کیه؟
تا حالا شده توی یه پروژه ببینی یه تیکه کد عجیب وجود داره و بخوای بدونی کی نوشته و چرا؟
با استفاده از دستور 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 میتونی اینکارو بکنی.
پایین چندتا از دستورهای مهمش رو آوردم.
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 𝗳𝗶𝗹𝗲.𝗷𝘀 ببین هر خط از فایل رو کی تغییر داده!
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 -𝗟 𝟮𝟬,𝟯𝟬 𝗳𝗶𝗹𝗲.𝗷𝘀 فقط تغییرات بین خط ۲۰ تا ۳۰ رو نشون بده.
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 -𝗖 𝗳𝗶𝗹𝗲.𝗷𝘀 اگه کد از یه فایل دیگه کپی شده باشه، پیداش کن!
@DevTwitter | <Soudabe Heydari/>
تا حالا شده توی یه پروژه ببینی یه تیکه کد عجیب وجود داره و بخوای بدونی کی نوشته و چرا؟
با استفاده از دستور 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 میتونی اینکارو بکنی.
پایین چندتا از دستورهای مهمش رو آوردم.
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 𝗳𝗶𝗹𝗲.𝗷𝘀 ببین هر خط از فایل رو کی تغییر داده!
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 -𝗟 𝟮𝟬,𝟯𝟬 𝗳𝗶𝗹𝗲.𝗷𝘀 فقط تغییرات بین خط ۲۰ تا ۳۰ رو نشون بده.
- کامند 𝗴𝗶𝘁 𝗯𝗹𝗮𝗺𝗲 -𝗖 𝗳𝗶𝗹𝗲.𝗷𝘀 اگه کد از یه فایل دیگه کپی شده باشه، پیداش کن!
@DevTwitter | <Soudabe Heydari/>
🔥69👍20👎2❤1
سازنده redis یه پست گذاشته
We are destroying software
که با بعضی از practice ها داره انجام میشه.
مثلا یکیش گفتن don't invent the wheel به برنامه نویس های جدید. اما اینکار چیزیه که میفهمی چرخ چطور کار میکنه و قدم اول برای ساخت یه چرخ جدید و بهتره.
یا سعی برای تولید سریع تر کد به جای طراحی بهتر کد.
الان میتونیم کاملا نتایج این موارد رو ببینیم، پروداکت هایی کاملا غیر اصولی هستن و تنها مزیتشون اینه که الان کار میکنن و کدبیس شبیه باتلاق تا نرم افزار.
لینک پست رو پایین میذارم اگه خواستین باقی موارد رو بخونید.
https://antirez.com/news/145
@DevTwitter | <Ashkan Hooshidar/>
We are destroying software
که با بعضی از practice ها داره انجام میشه.
مثلا یکیش گفتن don't invent the wheel به برنامه نویس های جدید. اما اینکار چیزیه که میفهمی چرخ چطور کار میکنه و قدم اول برای ساخت یه چرخ جدید و بهتره.
یا سعی برای تولید سریع تر کد به جای طراحی بهتر کد.
الان میتونیم کاملا نتایج این موارد رو ببینیم، پروداکت هایی کاملا غیر اصولی هستن و تنها مزیتشون اینه که الان کار میکنن و کدبیس شبیه باتلاق تا نرم افزار.
لینک پست رو پایین میذارم اگه خواستین باقی موارد رو بخونید.
https://antirez.com/news/145
@DevTwitter | <Ashkan Hooshidar/>
❤34👍19
بچهها، این روش تعریف اینترفیس خوبهها، ولی یه مشکلی که داره اینه که اگه کامپوننت یه کم بزرگ بشه یا نیاز به پراپرتیهای بیشتری داشته باشه، مدیریت و تغییر اینترفیسها یه خورده دردسر میشه.
راهحل تمیزتر و هوشمندانهتر ارثبری از <React.HTMLAttributes<T!
وقتی از این یوتیلیتی استفاده میکنی، تمام پراپرتیهای عمومی HTML رو بهصورت خودکار توی کامپوننتت داری، بدون اینکه مجبور بشی id, className, onClick و کلی پراپ دیگه رو دستی اضافه کنی. این یعنی کد کوتاهتر، خواناتر و انعطافپذیرتر!
حالا دیگه هر وقت نیاز به پراپرتی جدیدی مثل data-*, role, یا style داشتی، بدون هیچ تغییری در اینترفیس، همهش رو بهصورت اتوماتیک داری.
@DevTwitter | <Liam Paknia/>
راهحل تمیزتر و هوشمندانهتر ارثبری از <React.HTMLAttributes<T!
وقتی از این یوتیلیتی استفاده میکنی، تمام پراپرتیهای عمومی HTML رو بهصورت خودکار توی کامپوننتت داری، بدون اینکه مجبور بشی id, className, onClick و کلی پراپ دیگه رو دستی اضافه کنی. این یعنی کد کوتاهتر، خواناتر و انعطافپذیرتر!
حالا دیگه هر وقت نیاز به پراپرتی جدیدی مثل data-*, role, یا style داشتی، بدون هیچ تغییری در اینترفیس، همهش رو بهصورت اتوماتیک داری.
@DevTwitter | <Liam Paknia/>
👍51❤6👎2
دستورات پیشرفتهتر systemctl برای مدیریت سرویسها در لینوکس
علاوه بر دستورات پایهای، systemctl امکانات قدرتمند دیگری نیز دارد که برای مدیریت حرفهای سرویسها و پردازشهای سیستم ضروری هستند. در ادامه لیستی از دستورات کاربردی و پیشرفته را بررسی میکنیم:
+ مدیریت سرویسها (Services)
- مشاهده وضعیت تمامی سرویسهای در حال اجرا:
- مشاهده وضعیت تمامی سرویسهای فعال و غیرفعال:
- بررسی وضعیت سرویس خاص به همراه لاگهای اخیر:
- اجبار به توقف یک سرویس (Kill کردن سخت یک سرویس):
- مشاهده تمامی وابستگیهای یک سرویس:
- مشاهده سرویسهایی که در هنگام بوت اجرا میشوند:
+ فعال/غیرفعال کردن سرویسها
- فعالسازی یک سرویس برای اجرا در هنگام بوت:
- غیرفعال کردن یک سرویس تا هنگام اجرای دستی:
- ریلود کردن تغییرات در سرویس بدون نیاز به ریاستارت:
- ریست کردن وضعیت یک سرویس:
+ کنترل سطح دسترسی و وضعیت بوت
- مشاهده سطح اجرایی (Runlevel) فعلی:
- تغییر سطح اجرایی به حالت چندکاربره (Multi-User Mode):
- تغییر به حالت اضطراری (Emergency Mode):
- بوت سیستم به حالت ریکاوری:
+ مدیریت لاگها و رخدادها
- مشاهده لاگهای جدید سرویس خاص:
- مشاهده لاگهای سرویس از زمان بوت سیستم:
- مشاهده لاگهای کرنل:
- مشاهده لاگهای جدید در لحظه (مشابه tail -f):
+ خاموش، ریاستارت و خاموشی زمانبندی شده
- خاموش کردن سیستم:
- ریاستارت سیستم:
- ریاستارت زمانبندی شده در 10 دقیقه:
- لغو خاموشی یا ریاستارت برنامهریزیشده:
چرا systemctl مهم است؟
ابزار systemctl یک ابزار قدرتمند برای مدیریت حرفهای سرویسها، بررسی وضعیت سیستم، تنظیمات بوت، لاگها و کنترل پردازشها است. اگر ادمین لینوکس هستید، این دستورات میتوانند شما را در مدیریت بهتر سرور و سرویسهای حیاتی یاری کنند.
@DevTwitter | <Ebrahim Rohani/>
علاوه بر دستورات پایهای، systemctl امکانات قدرتمند دیگری نیز دارد که برای مدیریت حرفهای سرویسها و پردازشهای سیستم ضروری هستند. در ادامه لیستی از دستورات کاربردی و پیشرفته را بررسی میکنیم:
+ مدیریت سرویسها (Services)
- مشاهده وضعیت تمامی سرویسهای در حال اجرا:
systemctl list-units --type=service --state=running- مشاهده وضعیت تمامی سرویسهای فعال و غیرفعال:
systemctl list-units --type=service- بررسی وضعیت سرویس خاص به همراه لاگهای اخیر:
systemctl status nginx --no-pager- اجبار به توقف یک سرویس (Kill کردن سخت یک سرویس):
systemctl kill apache2- مشاهده تمامی وابستگیهای یک سرویس:
systemctl list-dependencies sshd- مشاهده سرویسهایی که در هنگام بوت اجرا میشوند:
systemctl list-unit-files --state=enabled+ فعال/غیرفعال کردن سرویسها
- فعالسازی یک سرویس برای اجرا در هنگام بوت:
systemctl enable mysql- غیرفعال کردن یک سرویس تا هنگام اجرای دستی:
systemctl disable docker- ریلود کردن تغییرات در سرویس بدون نیاز به ریاستارت:
systemctl reload nginx- ریست کردن وضعیت یک سرویس:
systemctl reset-failed apache2+ کنترل سطح دسترسی و وضعیت بوت
- مشاهده سطح اجرایی (Runlevel) فعلی:
systemctl get-default- تغییر سطح اجرایی به حالت چندکاربره (Multi-User Mode):
systemctl set-default multi-user.target- تغییر به حالت اضطراری (Emergency Mode):
systemctl emergency- بوت سیستم به حالت ریکاوری:
systemctl rescue+ مدیریت لاگها و رخدادها
- مشاهده لاگهای جدید سرویس خاص:
journalctl -u nginx --no-pager- مشاهده لاگهای سرویس از زمان بوت سیستم:
journalctl -u sshd --since today- مشاهده لاگهای کرنل:
journalctl -k- مشاهده لاگهای جدید در لحظه (مشابه tail -f):
journalctl -f+ خاموش، ریاستارت و خاموشی زمانبندی شده
- خاموش کردن سیستم:
systemctl poweroff- ریاستارت سیستم:
systemctl reboot- ریاستارت زمانبندی شده در 10 دقیقه:
shutdown -r +10- لغو خاموشی یا ریاستارت برنامهریزیشده:
shutdown -cچرا systemctl مهم است؟
ابزار systemctl یک ابزار قدرتمند برای مدیریت حرفهای سرویسها، بررسی وضعیت سیستم، تنظیمات بوت، لاگها و کنترل پردازشها است. اگر ادمین لینوکس هستید، این دستورات میتوانند شما را در مدیریت بهتر سرور و سرویسهای حیاتی یاری کنند.
@DevTwitter | <Ebrahim Rohani/>
👍31❤8👎1
درباره RefreshToken و AccessToken براتون مطلبی رو آماده کردم تا بیشتر باهاشون آشنا بشیم
وقتی دربارهی رفرش توکن صحبت میکنیم، در واقع داریم دربارهی یه مکانیزم امنیتی حرف میزنیم که به کاربر اجازه میده بدون نیاز به لاگین مجدد، به سیستم دسترسی داشته باشه. این کار با استفاده از دو نوع توکن انجام میشه:
Access Token: یه توکن کوتاهمدت که برای دسترسی به منابع استفاده میشه.
Refresh Token: یه توکن بلندمدتتر که برای گرفتن Access Token جدید استفاده میشه.
مراحل کلی رفرش توکن:
اول:کاربر لاگین میکنه: بعد از لاگین، سرور یه Access Token و یه Refresh Token به کلاینت میده.
دوم:Access Token منقضی میشه: بعد از یه مدت (مثلاً ۱۵ دقیقه)، Access Token دیگه معتبر نیست.
سوم:درخواست جدید با توکن منقضی شده: وقتی کاربر یه درخواست جدید میفرسته، سرور خطای 401 (Unauthorized) برمیگردونه.
چهارم:رفرش توکن فرستاده میشه: کلاینت با استفاده از Refresh Token، یه درخواست به سرور میفرسته و یه Access Token جدید میگیره.
پنجم:درخواست اصلی تکرار میشه: کلاینت درخواست اصلی رو با Access Token جدید دوباره ارسال میکنه.
چطوری با Axios توی پروژهها رفرش توکن رو خودکار کنیم؟
یه مشکلی که همیشه توی پروژههای با احراز هویت پیش میاد، منقضی شدن توکنهاست. کاربر کارش رو میکنه، یهو میبینه خطای 401 میگیره و مجبوره دوباره لاگین کنه!
این کار رو میشه با استفاده از Axios Interceptors به راحتی پیادهسازی کرد. یعنی وقتی توکن منقضی میشه، به جای اینکه کاربر رو به لاگین برگردونیم، یه درخواست جدید برای رفرش توکن میفرستیم و بعد درخواست اصلی رو دوباره ارسال میکنیم. به همین سادگی!
چطوری کار میکنه؟
خطای 401 رو میگیریم: هر وقت سرور بهمون بگه "توکنت تموم شده" (یعنی خطای 401)، وارد عمل میشیم.
رفرش توکن میگیریم: یه درخواست به سرور میفرستیم و با استفاده از Refresh Token، یه توکن جدید میگیریم.
درخواست اصلی رو تکرار میکنیم: توکن جدید رو جایگزین میکنیم و درخواست اصلی رو دوباره ارسال میکنیم.
نکات مهم:
-با کوکیها کار میکنیم: با withCredentials: true مطمئن میشیم که کوکیها (مثل Refresh Token) به درستی ارسال میشن.
-جلوی تلاشهای بیجا رو میگیریم: با یه فلگ ساده (retry_) مطمئن میشیم که فقط یه بار برای رفرش توکن تلاش میکنیم.
-امنیت اولویته: همیشه حواسمون به ذخیرهسازی امن Refresh Token باشه!
این روش نهتنها تجربه کاربری رو بهتر میکنه، بلکه باعث میشه کاربر کمتر با صفحهی لاگین کلنجار بره و کارش رو سریعتر تموم کنه
@DevTwitter | <Soheil Seyyedi/>
وقتی دربارهی رفرش توکن صحبت میکنیم، در واقع داریم دربارهی یه مکانیزم امنیتی حرف میزنیم که به کاربر اجازه میده بدون نیاز به لاگین مجدد، به سیستم دسترسی داشته باشه. این کار با استفاده از دو نوع توکن انجام میشه:
Access Token: یه توکن کوتاهمدت که برای دسترسی به منابع استفاده میشه.
Refresh Token: یه توکن بلندمدتتر که برای گرفتن Access Token جدید استفاده میشه.
مراحل کلی رفرش توکن:
اول:کاربر لاگین میکنه: بعد از لاگین، سرور یه Access Token و یه Refresh Token به کلاینت میده.
دوم:Access Token منقضی میشه: بعد از یه مدت (مثلاً ۱۵ دقیقه)، Access Token دیگه معتبر نیست.
سوم:درخواست جدید با توکن منقضی شده: وقتی کاربر یه درخواست جدید میفرسته، سرور خطای 401 (Unauthorized) برمیگردونه.
چهارم:رفرش توکن فرستاده میشه: کلاینت با استفاده از Refresh Token، یه درخواست به سرور میفرسته و یه Access Token جدید میگیره.
پنجم:درخواست اصلی تکرار میشه: کلاینت درخواست اصلی رو با Access Token جدید دوباره ارسال میکنه.
چطوری با Axios توی پروژهها رفرش توکن رو خودکار کنیم؟
یه مشکلی که همیشه توی پروژههای با احراز هویت پیش میاد، منقضی شدن توکنهاست. کاربر کارش رو میکنه، یهو میبینه خطای 401 میگیره و مجبوره دوباره لاگین کنه!
این کار رو میشه با استفاده از Axios Interceptors به راحتی پیادهسازی کرد. یعنی وقتی توکن منقضی میشه، به جای اینکه کاربر رو به لاگین برگردونیم، یه درخواست جدید برای رفرش توکن میفرستیم و بعد درخواست اصلی رو دوباره ارسال میکنیم. به همین سادگی!
چطوری کار میکنه؟
خطای 401 رو میگیریم: هر وقت سرور بهمون بگه "توکنت تموم شده" (یعنی خطای 401)، وارد عمل میشیم.
رفرش توکن میگیریم: یه درخواست به سرور میفرستیم و با استفاده از Refresh Token، یه توکن جدید میگیریم.
درخواست اصلی رو تکرار میکنیم: توکن جدید رو جایگزین میکنیم و درخواست اصلی رو دوباره ارسال میکنیم.
نکات مهم:
-با کوکیها کار میکنیم: با withCredentials: true مطمئن میشیم که کوکیها (مثل Refresh Token) به درستی ارسال میشن.
-جلوی تلاشهای بیجا رو میگیریم: با یه فلگ ساده (retry_) مطمئن میشیم که فقط یه بار برای رفرش توکن تلاش میکنیم.
-امنیت اولویته: همیشه حواسمون به ذخیرهسازی امن Refresh Token باشه!
این روش نهتنها تجربه کاربری رو بهتر میکنه، بلکه باعث میشه کاربر کمتر با صفحهی لاگین کلنجار بره و کارش رو سریعتر تموم کنه
@DevTwitter | <Soheil Seyyedi/>
👍43❤7👎4
یدونه نرم افزار چت p2p
https://github.com/aminGhafoory/peerchat
برای بازی کردن با webrtc ساختمش
قراره بشه یدونه نرم افزار انتقال فایل بین دو تا سیستم از طریق webrtc
@DevTwitter | <krusty the clown/>
https://github.com/aminGhafoory/peerchat
برای بازی کردن با webrtc ساختمش
قراره بشه یدونه نرم افزار انتقال فایل بین دو تا سیستم از طریق webrtc
@DevTwitter | <krusty the clown/>
👍19