<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های افشین توکلیان | Afshin Tavakolian</title>
        <link>https://virgool.io/feed/@afsh7n</link>
        <description>یک دانشجوی رشته نرم افزار و توسعه دهنده وب که علاقه مند به چالش و یادگیریه</description>
        <language>fa</language>
        <pubDate>2026-04-15 02:52:54</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/163993/avatar/mjLufG.jpg?height=120&amp;width=120</url>
            <title>افشین توکلیان | Afshin Tavakolian</title>
            <link>https://virgool.io/@afsh7n</link>
        </image>

                    <item>
                <title>تغییر نام و ایمیل در سوابق گیت</title>
                <link>https://virgool.io/@afsh7n/%D8%AA%D8%BA%DB%8C%DB%8C%D8%B1-%D9%86%D8%A7%D9%85-%D9%88-%D8%A7%DB%8C%D9%85%DB%8C%D9%84-%D8%AF%D8%B1-%D8%B3%D9%88%D8%A7%D8%A8%D9%82-%DA%AF%DB%8C%D8%AA-zk5xqdwygrj2</link>
                <description>تغییر نام و ایمیل در سوابق گیتگیت محبوب ترین و پرکاربرترین سیستم کنترل ورژن هست،غیر ممکنه که برنامه نویس باشید و ازش استفاده نکرده باشید.همه ما در طول روز بخشی از ساعت کاریمون رو با گیت سپری میکنیم.کامیت میزنیم،کدها رو پوش میکنیم و .... اما ممکنه شما بعد از یک مدت کار روی پروژه بخاید ایمیلتون یا اسمتون که روی کامیت های قبلی زدید رو تغییر بدید.برای مثال ممکنه مثل من ایمیلتون رو عوض کنید و بخاید کامیت های قبلی رو به سوابق ایمیل جدیدتون ببرید،اگه این شما هم این چالش رو دارید با من همراه باشید ?مرحله اول: وارد روت پروژه بشید و یک فایل به اسم update-commit.sh ایجاد کنید (اسم فایل مهم نیست و فقط باید با پسوند .sh باشه)توی مرحله بعدی این قطعه کد رو توی فایل قرار بدید:(انتهای مقاله قرارش میدم)تغییر نام و ایمیل در سوابق گیتهمه چی داخل تصویر مشخصه و نیاز به توضیح نیست.اطلاعات خودتون رو توی قسمت های مشخص شده جایگزین کنید و فایل رو ذخیره کنید.توی مرحله بعد یه ترمینال باز کنید توی روت پروژه و با این دستور این اسکریپت رو اجرا کنید../update-commit.shبعد از اجرای دستور یک ترمینال جدید براتون باز میشه و باید منتظر بمونید تا کارش تموم بشه.و در نهایت برای اینکه این تغییرات رو روی ریپازیتوری(گیت هاب،گیت لب و ...) ببینید کافیه با دستور زیر فورس پوش کنید.git push origin main -fتمام شد.الان میتونید به پروفایل خودتون برید و سوابق کامیت هاتون رو ببینید?امیدوارم که براتون کاربردی بوده باشه.اگه سوالی بود توی کامنت ها منتظرتونم.قطعه کد داخل عکس:#!/bin/sh

git filter-branch --env-filter &#039;
WRONG_EMAIL=&amp;quotایمیل قبلی&amp;quot
NEW_NAME=&amp;quotاسم جدید&amp;quot
NEW_EMAIL=&amp;quotایمیل جدید&amp;quot

if [ &amp;quot$GIT_COMMITTER_EMAIL&amp;quot = &amp;quot$WRONG_EMAIL&amp;quot ]
then
   export GIT_COMMITTER_NAME=&amp;quot$NEW_NAME&amp;quota
    export GIT_COMMITTER_EMAIL=&amp;quot$NEW_EMAIL&amp;quot
fi
if [ &amp;quot$GIT_AUTHOR_EMAIL&amp;quot = &amp;quot$WRONG_EMAIL&amp;quot ]
then
    export GIT_AUTHOR_NAME=&amp;quot$NEW_NAME&amp;quot
    export GIT_AUTHOR_EMAIL=&amp;quot$NEW_EMAIL&amp;quot
fi
&#039; --tag-name-filter cat -- --branches --tags</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Sun, 15 Jan 2023 01:41:55 +0330</pubDate>
            </item>
                    <item>
                <title>اسپاتیفای رایگان اما بدون تبلیغ آزاردهنده | حذف تبلیغ اسپاتیفای</title>
                <link>https://virgool.io/@afsh7n/%D8%A7%D8%B3%D9%BE%D8%A7%D8%AA%DB%8C%D9%81%D8%A7%DB%8C-%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86-%D8%A7%D9%85%D8%A7-%D8%A8%D8%AF%D9%88%D9%86-%D8%AA%D8%A8%D9%84%DB%8C%D8%BA-%D8%A2%D8%B2%D8%A7%D8%B1%D8%AF%D9%87%D9%86%D8%AF%D9%87-%D8%AD%D8%B0%D9%81-%D8%AA%D8%A8%D9%84%DB%8C%D8%BA-%D8%A7%D8%B3%D9%BE%D8%A7%D8%AA%DB%8C%D9%81%D8%A7%DB%8C-jxsne5vbdjwl</link>
                <description>اسپاتیفای رایگان اما بدون تبلیغ آزاردهندهاگر شما هم از علاقه مندان به موزیک هستید و روزانه تایم زیادی از خودتون رو پیش سیستم هستید و از سرویس اسپاتیفای برای شنیدن موسیقی مورد علاقتون استفاده میکنید،احتمالا تبلیغات این سرویس شما رو هم کلافه کرده،مخصوصا برای ما که توی ایران زندگی میکنیم و سرعت اینترنتمون برای این سرویس زیاد خوب نیست.اما خوشبختانه هیچ مشکلی بدون راه حل نیست و یه پروژه به نام SpotX-CLI راه اندازی کردن و اومدن تبلیغات نرم افزار اسپاتیفای رو برام سه سیستم عامل دستکتاپ یعنی ویندوز ، مک ، لینوکس رو بلاک کردن و دیگه توی این نرم افزار بعداز استفاده از این پروژه خبری از تبلیغات نیست??روش استفاده از این پروژه خیلی ساده هست و شما میتونید به صفحه مربوط به سیستم عامل خودتون برید و روش نصب رو مطالعه کنید.من از سیستم عامل ویندوز استفاده میکنم.پس به این صفحه مراجعه میکنم.در مرحله اول لازمه تا آخرین نسخه نرم افزار اسپاتیفای رو روی سیستمتو نصب کنید(اگر نصب ندارید میتونید به این لینک مراجعه کنید و آخرین نسخه رو دانلود کنید).⚠ نکته:نسخه هایی که از طریق ماکروسافت استور نصب میشن برای این پروژه مناسب نیستند،پس اگر از اون استفاده میکنید،حذف و نسخه رسمی را از سایت اسپاتیفای نصب کنید.و در نهایت این فایل bat رو دانلود کنید و بعد از دانلود روش دبل کلیک کنید تا اجرا بشه.بعد از اجرا براتون یک پاورشل باز میکنه و حدود چندثانیه این پاورشل باز میمونه تا بتونه تغییرات لازم رو اعمال کنه و بعداز اینکه کارش تموم شد براتون اسپاتیفای رو باز میکنه و حالا میتونید از اسپاتیفای بدون تبلیغ لذت ببرید.مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)سوالی داشتید توی کامنت ها بپرسید</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Mon, 26 Dec 2022 02:27:02 +0330</pubDate>
            </item>
                    <item>
                <title>استفاده از کش nginx و افزایش سرعت لود سایت</title>
                <link>https://virgool.io/@afsh7n/%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-%DA%A9%D8%B4-nginx-%D9%88-%D8%A7%D9%81%D8%B2%D8%A7%DB%8C%D8%B4-%D8%B3%D8%B1%D8%B9%D8%AA-%D9%84%D9%88%D8%AF-%D8%B3%D8%A7%DB%8C%D8%AA-gij6pyr50jwb</link>
                <description>استفاده از کش nginx و افزایش سرعت لود سایتهمینطور که میدونید سرعت لود سایت یکی از پارامتر های مهم برای گرفتن نتیحه توی سئو و رضایت کاربر هست.اما برای اینکار ما توی مرحله اول نیاز بریم به سراغ سرویس های کش قوی و پیشرفته و اگر وب سرور ما nginx  باشه میتونیم تا حد بسیار قابل قبولی سرعت لود وبسایتمون رو بهبود ببخشیم.اگر شما هم از وب سرور nginx  استفاده میکنید و سرعت لود وبسایتتون اونقدری که فک میکنید عالی نیست،با ادامه این مقاله با من همراه باشید.خب ما قراره فایل های استاتیک خودمون یعنی html,css,js,image,font و این سری موارد رو کش کنیم تا کاربر هربار لازم نباشه بیاد و این محتویات تکراری رو دانلود کنه.با همین کار ساده میتونیم سرعت لود وبسایمون رو بهبود بدیم.اما خب چطوری انجامش بدیم؟مرحله اول:وارد فایل کانفیگ nginx  خودتون بشید.اگه سرور شما ابونتو هست احتمالا فایل کانفیگ شما توی ادرس زیر هستش./etc/nginx/sites-available/default ابتدا این فایل رو با nano یا هر ادیتور دیگه ای باز کنید.شما باید چیزی شبیه به کانفیگ زیر رو مشاهده کنید توی این صفحه:استفاده از کش nginx و افزایش سرعت لود سایتاین یک کانفیگ ساده nginx  هستش،ممکنه کانفیگ شما طولانی تر باشه اما مهم نیست و ما قرار نیست چیزی رو تغییر بدیم(اما پیشنهاد میکنم قبل از انجام ادامه مراحل یک کپی از این فایل داشته باشید تا در صورت خطا بتونید به نسخه قبل برگردید)خب ما باید این خطوط رو به فایل کانفیگ خودمون اضافه کنیم تا فایل های استاتیک برامون کش بشه.استفاده از کش nginx و افزایش سرعت لود سایت شما میتونید این کانفیگ رو از این آدرس دنبال کنید و از محتویاتش استفاده کنید.هیمنطور که توی مشاهده میکنید برای هربخش ما یک expires داریم که تاریخ انقضا یا به اصطلاح حذف شدن این دیتاهای استاتیک از کش nginx  هستش.شما میتونید این موارد رو تغییر بدید در صورت نیاز.برای مثال برای فایل های css,js تاریخ یک ساله ست شده و برای فایل های مدیا تاریخ یک ماهه.خب کارمون تموم هست و میتونیم یک بار nginx رو ریستارت کنیم تا تغییرات اعمال بشه و نتیجه کارمون رو بررسی کنیم.برای ریستارت کردن nginx میتونید از دستور زیر استفاده کنید.sudo service nginx restart?حالا وقتشه ادرس سایتتون رو توی مرورگر وارد کنید و از سرعت لود جدیدتون لذت ببرید(البته که سرعت لود برای دفعه اول روی هر مرورگر ممکنه مثل قبل باشه و کند باشه،چون در مرتبه اول یک بار باید این دیتاها گرفته شه و روی مروگر کاربر کش بشه.اما از دفعات بعد دیگه این اطلاعات هربار گرفته نمیشه و سرعت تغییر چشم گیری میکنه).لینک کانفیگ استفاده شده:https://github.com/afshintavakolian/nginx-caching-example/blob/main/nginx-caching.confممنون از اینکه با من همراه بودید،امیدوارم که براتون کاربردی بوده باشید.اگه سوالی بود توی کامنت ها در خدمتم:)</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Mon, 26 Dec 2022 01:28:41 +0330</pubDate>
            </item>
                    <item>
                <title>لینوکس Gnome با طراحی mac os</title>
                <link>https://virgool.io/@afsh7n/%D9%84%DB%8C%D9%86%D9%88%DA%A9%D8%B3-gnome-%D8%A8%D8%A7-%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-mac-os-vtj7earfpdty</link>
                <description>اگه شما هم دسته افرادی هستید که از تم و طراحی مک بوک ها خوشتون میاد اما به هردلیلی یک سیستم مک بوک ندارید و از کاربرای لینوکسی هستید،حتما تا پایان این مقاله با من همراه باشید تا لینوکستون رو از اون محیط همیشکی و ساده تبدیل کنیم به یک محیط قشنگ و لذت بخش.ما توی این مقاله از WhiteSur GTK Theme استفاده خواهیم کرد،که یک تم برای gnome هست و نصب فوق العاده ساده ای داره.نصب پیشنیاز و برنامه Tweak Toolقبل از شروع کار مطمئن بشید که Tweak Tool روی لینوکس شما نصب هست،اگر دستکتاپ شما گنوم باشه به احتمال زیاد این برنامه رو نصب دارید.اما اگر به هردلیلی این مورد رو نصب نداشتید میتونید خیلی ساده اون رو نصب کنید.(توی این مقاله روش نصب روی لینوکس ابونتو رو دنبال میکنیم،شما میتونید دستور نصب رو متناسب با پکیج منیجر لینوکس خودتون دنبال کنید).مرحله اول:sudo apt updateمرحله دوم:sudo add-apt-repository universeمرحله سوم:sudo apt install gnome-tweaksخب Tweak Tool با موفقیت نصب شد و حالا میتوینم بریم سراغ نصب تم.نصب تم مک بوک برای لینوکس Gnomeنصب تم مک بوک برای لینوکس Gnomeبرای نصب تم ابتدا باید پیشنیاز های اون رو نصب کنیم.برای نصب پیشنیاز ها دستور زیر رو اجرا کنید.sudo apt install sassc libglib2.0-dev-bin libxml2-utilsبعد از نصب پیشنیاز ها حالا باید تم رو کلون کنیم روی سیستم و درنهایت اون رو نصب کنیم.برای اینکار یک ترمینال باز میکنیم و دستور زیر رو وارد میکنیمgit clone git@github.com:vinceliuice/WhiteSur-gtk-theme.gitسپس وارد فولدر فولدر مربوطه میشیم با دستور زیرcd WhiteSur-gtk-themeو در نهایت دستور زیر رو داخل ترمینالی که توی این فولدر باز شده اجرا میکنیم../install.shحالا تم ما با موفقیت نصب شد.(این دستور شامل پارامتر های زیادی هست که میتونید با مراجعه به داکیومنشن متناسب به نیازتون ازش استفاده کنید،ما از حالت پیشفرض توی این مقاله استفاده کردیم)حالا باید وارد برنامه  Tweak Tool بشیم و اون رو فعال کنیم.برای اینکار وارد برنامه  Tweak Tool میشیم و سپس وارد تب appearance میشیملینوکس GNOME با طعم مک بوکخب توی این صفحه باید شما گزینه مربوط به shell رو اپدیت کنید و قرار بدید روی WhiteSur GTK Theme تا تم براتون فعال بشه(4تا حالت داره که میتونید هرکدوم رو بنا بر سلیقه فعال کنید)⚠ نکته:اگر برای شما هم مثل اسکرین شات موجود کنار shell  علامت اخطار بود نگران نباشید،کافیه وارد این سایت بشید و ابتدا روی Click here to install browser extension کلیک کنید تا اکستنشن مرورگر براتون نصب بشه و سپس توی کادر سرچ User Themes رو سرچ کنید ودرنهایت روی دکمه نصبش کلیک کنید.بعد از نصب کافیه یکبار برنامه Tweak Tool رو باز و بسته کنید تا گزینه shell براتون فعال بشه.نصب پکیج آیکون مک بوک برای لینوکس گنومنصب پکیج آیکون مک بوک برای لینوکس گنومبرای آیکون ها هم ما از پکیج مرتبط با همین تم یعنی WhiteSur Icon Theme استفاده خواهیم کرد که پروسه نصب ساده ای داره و کافیه دستورات زیر رو مرحله ب مرحله دنبال کنید.ابتدا یک ترمینال باز میکنیم و دستور زیر رو وارد میکنیم.git clone git@github.com:vinceliuice/WhiteSur-icon-theme.gitسپس وارد فولدر فولدر مربوطه میشیم با دستور زیرcd WhiteSur-icon-themeو در نهایت دستور زیر رو داخل ترمینالی که توی این فولدر باز شده اجرا میکنیم تا آیکون ها نصب بشن../install.shحالا باید وارد برنامه  Tweak Tool بشیم و اون رو فعال کنیم.برای اینکار وارد برنامه  Tweak Tool میشیم و سپس وارد تب appearance میشیم و این بار گزینه مربوط به ایکون رو انتخاب میکنیم و در نهایت یکی از گزینه های WhiteSur رو بنا به سلیقه خودمون انتخاب میکنیم.خسته نباشید تم مک بوکی ما با موفقیت نصب شد و میتوینم حالا از لینوکس خودمون با ظاهر مک بوکی که داره لذت ببریم.اگه سوالی یا موردی توی نصب داشتید حتما توی بخش کامنت ها بپرسید.مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Mon, 26 Dec 2022 00:36:20 +0330</pubDate>
            </item>
                    <item>
                <title>نصب Tailwindcss در Vue3</title>
                <link>https://virgool.io/laravel-community/%D9%86%D8%B5%D8%A8-tailwindcss-%D8%AF%D8%B1-vue3-rkvzglpdgvud</link>
                <description>نصب Tailwindcss در Vuejsمعرفی Tailwindcssاگه هنوز با Tailwindcss آشنا نیستید که پیشنهاد میکنم حتما حتما یه وقت بگذارید و هرچه زودتر این فریمورک دسوت داشتنی css رو یادبگیرید.با اطمینان میشه گفت Tailwindcss امروزه جز معروف ترین و محبوب ترین فریمورک های css هستش.کافیه یه سر به داکیومنشنش بزنید و از زیبایی ها و قدرت این فریمورک دوست داشتنی رو ببینید.نصب Tailwindcss در Vue3خب برای نصب Tailwindcss ما نیاز به یک پروژه vuejs داریم که میتونید با کمک vue cli ایجاد کنید و من دیگه وققتون رو بابت این موضوع نمیگیرم.بعد از ایجاد یه پروژه vue وارد اون میشیم و داخل فولدر src یا فایل به اسم tailwind.css ایجاد میکنیم و محتویات اون رو مقادیر زیر قرار میدیم:@tailwind base;
@tailwind components;
@tailwind utilities;بعد از اون کافیه ترمینال رو باز کنید و دستور زیر رو برای نصب Tailwindcss و postcss  رو بزنید:npm install tailwindcss postcss autoprefixerممکنه توی این مرحله به این خطا برخورد کنید:Error: PostCSS plugin tailwindcss requires PostCSS 8.خطای بالا به ما میگه که هنوز از PostCSS 8 پشتیبانی نمیکنه که جای نگرانی نداره و شما کافیه دوتا دستور زیر رو بزنید برای رفع این مشکل:دستور اول برا حذف این مواردی هست که نصب کردیم و دستور دوم برای نصب نسخه ای هست که بدون مشکل برای ما کار میکنه:npm uninstall tailwindcss postcss autoprefixerو دستور دوم:npm install tailwindcss@npm:@tailwindcss/postcss7-compat @tailwindcss/postcss7-compat postcss@^7 autoprefixer@^9خب الان که با موفقیت Tailwindcss نصب شد کافیه با دستور زیر فایل کانفیگ Tailwindcss و postcss رو ایجاد کنیم:npx tailwindcss init -pخب الان کافیه وارد فایل main.js که داخل فولدر src هست بشیم و فایل استایل tailwindcss رو ایمپوت کنیم:import &#039;./tailwind.css&#039;و در نهایت وارد فایل tailwind.config.js میشیم و قسمت purge رو به این به این شکل تغییر میدیم:purge:[&amp;quot./src/**/*.vue&amp;quot],تموم شد خسته نباشید Tailwindcss با موفقیت نصب شد کافیه الان پروژه رو با کمک دستور npm run serve بالا بیارید.نکته:اگه از node ورژن 17 و یا بالاتر استفاده میکنید ممکنه با خطای digital envelope routines::unsupported - ERR_OSSL_EVP_UNSUPPORTED روبرو بشید که برای رفع این مشکل کافیه وارد فایل package.json بشید و و قسمت اسکریپت رو به این حالت تغییر بدید:&amp;quotserve&amp;quot: &amp;quotexport NODE_OPTIONS=--openssl-legacy-provider &amp;&amp; vue-cli-service serve&amp;quot,
&amp;quotbuild&amp;quot: &amp;quotexport NODE_OPTIONS=--openssl-legacy-provider &amp;&amp; vue-cli-service build&amp;quot,
&amp;quotlint&amp;quot: &amp;quotexport NODE_OPTIONS=--openssl-legacy-provider &amp;&amp; vue-cli-service lint&amp;quotحالا با خیال راحت و بدون هیچ مشکلی پروژه شما اماده است.مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)سوالی داشتید توی کامنت ها بپرسید</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Sat, 25 Dec 2021 19:11:50 +0330</pubDate>
            </item>
                    <item>
                <title>برنامه نویسی ماژولار در لاراول با پکیج laravel-modules</title>
                <link>https://virgool.io/laravel-community/%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D9%85%D8%A7%DA%98%D9%88%D9%84%D8%A7%D8%B1-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-%D8%A8%D8%A7-%D9%BE%DA%A9%DB%8C%D8%AC-laravel-modules-tg7rsny5eqlp</link>
                <description>برنامه نویسی ماژولار در لاراول با پکیج laravel-modulesاگه هنوز به صورت رویه ای برنامه نویسی انجام میدید پیشنهاد میکنم این مقاله رو از دست ندید.اول از همه ببینیم برنامه نویسی رویه ای به چه مدلی میگن،خب اگه شما با ساختار پیشفرض لاراول جلو میرید یعنی همه مدل هاتون داخل فولدر app هستش و مثلا همه کنترل هاتون توی آدرس app/Http/Controllers هستش و مابقی موارد مثل ماگرشن ها و .... هم سرجاهای پیشفرض خودشون هستش باید عرض کنم خدمتتون که مدل برنامه نویسی شما رویه ای هستش.اما خب شاید براتون سوال پیش بیاد که مشکل چیه؟خب اگه خیلی ساده بخام بگم فرض کنید پروژه بزرگ شده و هر بخش از پروژه ۳و۴ تا مدل و ماگرشن داره.بعد شما وقتی وارد پوشه app  میشید با یه عالمه مدل مواجعه میشید و مجبورید کلی اسکرول کنید و دنبال فایل موردنطرتون باشید.یا فرض کنید یه بخش مثلا مدیریت کاربران(لیست،حذف و اضافه و ...) طراحی کردید بعد توی یک پروژه دیگه یک بخش دقیقا مشابه به همین بخش رو دارید،بله میتونید کدهاتون رو کپی پیست کنید اما زمانبر هستش و اگه شما ماژولار نوشته بودید پروژتون رو خیلی ساده پوشه ماژول رو انتقال میداد و اسم ماژول رو اضافه میکردید به لیست ماژول ها تا لود شه همین:) باهام همراه باشید تا از این به بعد ماژولار بنویسیمنصب پکیج laravel-modules یه پکیج فوق العاده برای این کار وجود داره که کارتون رو خیلی ساده میکنه،برای نصب کافیه دستور زیر رو داخل ترمینال وارد کنید:composer require nwidart/laravel-modulesخب حالا با دستور زیر فایل کانفیگ اون رو از داخل فولدر vendor استخراج میکنیم:php artisan vendor:publish --provider=&amp;quotNwidart\Modules\LaravelModulesServiceProvider&amp;quotخب حالا باید وارد فایل composer.json بشید و توی بخش autoloading،پکیج رو رجیستر کنید.به این شکل:{   
&amp;quotautoload&amp;quot: { 
    &amp;quotpsr-4&amp;quot: {      
                &amp;quotApp\\&amp;quot: &amp;quotapp/&amp;quot,      
                 &amp;quotModules\\&amp;quot: &amp;quotModules/&amp;quot  
           }
    } 
}خب حالا با دستور زیر فایل کانفیگ اون رو از داخل فولدر vendor استخراج میکنیم:خب با موفقیت نصب شد:)ساخت ماژول جدید با laravel-modulesبرای ساخت یک ماژول جدید کافیه دستور زیر رو درون ترمینال وارد کنید و به جای &lt;module-name&gt;اسم ماژول خودتون رو به صورت lowercase بنویسید:php artisan module:make &lt;module-name&gt;مثلا یک ماژول User میخایم ایجاد کنیم:php artisan module:make Userبعد از اجرای دستور بالا یک فولدر به بخش اصلی پروژه به اسم Modules اضافه میشه و یه فایل به اسم modules_statuses.json.ماژول هایی که ایجاد میکنید محتویات اون درون پوشه Modules میرن و یه لاین هم درون modules_statuses.json اضافه میشه که مقدار بولین داره که مشخص میکنه ماژول شما فعال هست یا خیر.ساختار ماژولی که ایجاد میشه به این شکله:ساخت ماژول جدید با laravel-modules
همینطور که از اسامی فولدر ها مشخص هست ما برای هرماژول یه ساختار مشابه با همون ساختار لاراولی خودمون داریم با این تفاوت که وقتی به این سبک کدنویسی انجام میدیم ماژولار هستش و زمانی که برای مثال قصد داریم یه سری تغییرات توی بخش User انجام بدیم میدونیم که همه فایل های مرتبط به User داخل این فولدر هستش و دیگه نیازی نیست دنبال اونها بگردیم.توی همه بخش ها یک فایل مثال وجود داره که کمک میکنه با ساختار ماژولار آشنا شید.اما اگر نیاز داشتید به ماژول خودتون چیزی اضافه کنید،مثل یک مدل،یک کنترلر جدید یا یک ماگرشن جدید و ...کافیه دستور  زیر رو بزنید تا لیست دستورات و فایل هایی که میتونید ایجاد کنید رو براتون لیست کنه:php artisan moduleبرای مثال برای ایجاد یک مدل برای ماژول یوزر کافیه این دستور رو بزنیم :php artisan module:make-model User Userتوی دستور بالا User اول اسم مدل ما هستش و User  دوم هم مشخص میکنه که این مدل مربوط به کدوم ماژول هستش،مابقی دستورات هم مشابه همین مورد هستند.اما خوب میتونید به داکیومنشن مراجعه کنید و اطلاعات بیشتری درباره این ماژول بدست بیاریدمرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)سوالی داشتید توی کامنت ها بپرسید</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Sun, 19 Dec 2021 01:30:16 +0330</pubDate>
            </item>
                    <item>
                <title>مدیریت حرفه ای فایل ها و تصاویر با پکیج medialibrary در لاراول</title>
                <link>https://virgool.io/laravel-community/%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA-%D8%AD%D8%B1%D9%81%D9%87-%D8%A7%DB%8C-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7-%D9%88-%D8%AA%D8%B5%D8%A7%D9%88%DB%8C%D8%B1-%D8%A8%D8%A7-%D9%BE%DA%A9%DB%8C%D8%AC-medialibrary-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-fppk2vfzpnlu</link>
                <description>مدیریت حرفه ای فایل ها و تصاویر با پکیج laravel-medialibrary در لاراول
امروزه دیگه ای پروژه ای نیست که داخلش ما نیاز نداشته باشیم با تصاویر کار کنیم،هرجای پروژه رو نگاه میکنی میبینی داره یه تصویری آپلود میشه و استفاده میشه.ولی خب باید برای یه سرویس مجزا طراحی کنیم تا درعین حال که همه تصاویر مدیریت شده توی یک جدول قرار دارن،بتونیم خیلی ساده هم ازش استفاده کنیم و قابلیت های خوبی هم در دسترس داشته باشیم،مثل همیشه شما نیاز ندارید ساعت ها کدنویسی کنید! تیم spatieزحمت کشیدن و یه پکیج فوق العاده آماده کردن که خیلی ساده میتونیم یه سیستم مدیریت حرفه ای برای تصاویرمون داشته باشیم.با من همراه باشید تا باهاش آشنا بشیم.نصب پکیج laravel-medialibraryبرای نصب کردن این پکیج دوست داشتنی کافیه دستور زیر رو توی ترمینال خودتون اجرا کنید:composer require &amp;quotspatie/laravel-medialibrary:^9.0.0&amp;quotاین دستور آخرین نسخه فعلی این پکیج رو برای برای ما نصب میکنه،حالا با دستور زیر فایل ماگرشن جدول اون رو از داخل فولدر vendor استخراج میکنیم:php artisan vendor:publish --provider=&amp;quotSpatie\MediaLibrary\MediaLibraryServiceProvider&amp;quot --tag=&amp;quotmigrations&amp;quotحالا با دستور زیر هم جداول خودمون رو ایجاد میکنیم:php artisan migrateحالا با دستور زیر فایل کانفیگ اون رو از داخل فولدر vendor استخراج میکنیم تا بتونیم تغییرات مدنظرمون رو اعمال کنیم:php artisan vendor:publish --provider=&amp;quotSpatie\MediaLibrary\MediaLibraryServiceProvider&amp;quot --tag=&amp;quotconfig&amp;quotخب وارد پوشه config پروژه بشید و داخل فایل filesystems.php این دیسک رو اضافه کنید:&#039;media&#039; =&gt; [
&#039;driver&#039; =&gt; &#039;local&#039;,
&#039;root&#039; =&gt; storage_path(&#039;app/private&#039;),
&#039;url&#039; =&gt; env(&#039;APP_URL&#039;).&#039;/private-storage&#039;,
&#039;visibility&#039; =&gt; &#039;private&#039;,
]خب حالا وارد فایل media-library.php درون پوشه config بشید،این فایل تنظیمات پکیج media-library ما هستش.اینجا لازمه همین اول کار دو تا تغییر توی اون اعمال کنید:دیسک پیشفرض رو تغییر بدید به دیسک جدیدی که ایجاد کردیممحدودیت سایز اپلود رو افزایش بدیمخب فایل media-library.php رو که باز میکنید کافیه این موارد رو به صورت زیر تغییر بدید &#039;disk_name&#039; =&gt; &#039;media&#039;,
&#039;max_file_size&#039; =&gt; 1024 * 1024 * 100,به صورت پیشفرض محدودیت سایز فایل 10 مگابایت هستش و ما اینو تغییر میدیم به 100.البته شما بسته به نوع و نیاز های پروژه میتونید این مقدار رو تغییر بدید.پکیج با موفقیت نصب و کانفیگ شد،بریم برا استفاده:)استفاده از پکیج laravel-medialibraryبرای استفاده از پکیج کافیه وارد مدل مورد نظر خودتون بشید و implements کنید از اینترفیس HasMediaAlias و همینطور داخل مدل این تریت InteractsWithMedia رو use کنید،به این شکل:&lt;?php
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Spatie\MediaLibrary\HasMedia as HasMediaAlias;
use Spatie\MediaLibrary\InteractsWithMedia;
class Category extends Model implements HasMediaAlias
{
use InteractsWithMedia;
}بعد از این کار حالا ما به یک سری متد جدید روی مدلمون دسترسی داریم.ذخیره سازی فایلبرای ذخیره کردن فایل ها حالا ما چندین روش در اختیار داریم که میتونید از اونها استفاده کنید:روش اول(با پاس دادن آدرس فایل یا همون ایندکس ریکوست حاوی فایل):$yourModel = YourModel::find(1); 
$yourModel-&gt;addMedia($pathToFile)-&gt;toMediaCollection(&#039;images&#039;);روش دوم(با دادن نام فیلد حاوی فایل):$yourModel = YourModel::find(1);
$yourModel-&gt;addMediaFromRequest(&#039;image&#039;)-&gt;toMediaCollection(&#039;images&#039;);روش سوم(با دادن لینک فایل):$url = &#039;http://medialibrary.spatie.be/assets/images/mountain.jpg&#039;; $yourModel-&gt;addMediaFromUrl($url)-&gt;toMediaCollection();همینطور که متوجه شدید ما یک toMediaCollection داریم،این مورد برای شما یک کالکشن درنظر میگیره با این اسم،و تمامی فایل های شما که با این اسم ذخیره کنید کنار هم قرار میده.برای مثال شما میتونید ده ها یا صدها کالکشن مجزا داشته باشید.ساخت تصاویر ریسپانسیوخب برای اینکه برای شما تصاویر ریسپانسیو هم ایجاد کنه کافیه زمان اضافه کردن یک تصویر،متد withResponsiveImagesروش صدا بزنید،به این شکل:$yourModel-&gt;addMedia($yourImageFile)-&gt;withResponsiveImages()-&gt;toMediaCollection(&#039;image&#039;);خب حالا فایل هامون رو ذخیره کردیم.برای دسترسی به اونهام کافیه از متد زیر استفاده کنیم:$mediaItems = $yourModel-&gt;getMedia();توی حالا بالا تمامی کالکشن های موجود لیست میشن اما اگه قصد دارید کالکشن خاصی رو برگردونید(مثلا کالکشن image که توی مثال بالا قرار دادیم) کافیه به این شکل متد رو صدا کنید.$mediaItems = $yourModel-&gt;getMedia(&#039;images&#039;);خروجی دستور بالا یک ارایه هست که با انتخاب یک مورد از اون میتونیم روی متدهای جدیدی برای دسترسی به لینک دانلود اون فایل دسترسی داشته باشیم.به مثال های زیر توجه کنید:$publicUrl = $mediaItems[0]-&gt;getUrl(); 
$publicFullUrl = $mediaItems[0]-&gt;getFullUrl(); //url including domain $fullPathOnDisk = $mediaItems[0]-&gt;getPath();و در نهایت برای حذف یک ایتم از کالکشن خودتون میتونید به این شکل عمل کنید:$mediaItems[0]-&gt;delete();و اگه هم قصد دارید کل کالکشن خودتون رو خالی کنید به این شکل:$yourModel-&gt;clearMediaCollection(&#039;images&#039;);البته در نظر داشته باشید که این تصاویر مرتبط هستند با مدل شما و اگه اون فیلد از جدول مدل شما حذف بشه تمامی فایل های مرتبط به اون هم حذف میشن.این پکیج متدهای زیاد دیگه ای داره که میتونید به این لینک مراجعه کنید و بیشتر و بیشتر دربارش بخونید.اگه نیاز داشتید یک سری قسمت های رو هم تغییر بدید مثل نام فایل ها،ساخت لینک موقت (چون این مورد فقط برای دیسک های s3 فعلا فقط موجوده)‌و ... میتونید به بخش advanced used داکیومنشن مراجعه کنید و با مطالعه بخش موردنظر این پکیج رو برای خودتون شخصی سازی و کاربردی تر کنید.مرسی که وقت ارزشمندتون رو به مطالعه این مقاله اختصاص دادید :)سوالی داشتید توی کامنت ها بپرسید</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Sat, 18 Dec 2021 23:06:34 +0330</pubDate>
            </item>
                    <item>
                <title>راه اندازی داکر برای پروژه های لاراولی با laradock</title>
                <link>https://virgool.io/laravel-community/%D8%B1%D8%A7%D9%87-%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C-%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%87%D8%A7%DB%8C-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84%DB%8C-%D8%A8%D8%A7-laradock-nm5ormr0slsl</link>
                <description>راه اندازی داکر برای پروژه های لاراولی با laradockradock خوب اگه با داکر کار کرده باشید میدونید که سخت ترین و البته حوصله سربرترین قسمت یه پروژه میتونه راه اندازی داکر باشه،شما باید ایمیج های مختلف رو کانفیگ کنید و توی این پروسه ممکنه به هزارتا ارور مختلف بخورید و خارج از اون کلی وقتتون گرفته بشه.اما یه تیم خفن اومدن و یه محیط توسعه فوق العاده حرفه ای و خفن برای php آماده کردن و شما میتونید خیلی ساده و بدون انجام دادن کار خاصی داکر رو روی پروژتون راه اندازی کنیدمحیط توسعه  Laradockخب این محیط توسعه خفن و حرفه ای که عرض کردم خدمتتون اسمش laradock هستش.توی این پروژه هرچی که فکرش رو بکنید هستش و میتونید خیلی ساده با صدا زدن اسمش فعالش کنید.چیا هستش مثلا؟وب سرویس apache,nginx,... و دیتابیس های mysql,mongodb,postgresql , .... و سرویس کش redis و کلی سرویس دیگه.خب کافیه دیگه بریم سراغ راه اندازی اولین پروژمون:)راه اندازی Laradockخب من میخام برای مثال یک پروژه لاراولی رو با کمک laradock ایجاد کنم:خب اولین مرحله کافیه به پوشه پروژتون برید و ترمینال رو باز کنید و دستور زیر رو بزنید(یک نسخه از پروژه laradock رو برای شما کلون میکنه)git clone https://github.com/Laradock/laradock.gitخب حالا با دستور زیر وارد فولدر laradock خودمون میشیم و بعدش دستور دوم رو هم برای ساخت فایل .env (فایل پیکربندی پروژه) میزنیمcd laradock
cp .env.example .envخب حالا وارد فایل .env میشیم،اینجا فایل پیکربندی سرویس های laradock هستش،اگه نیاز به تغییر خاصی باشه میتونیم اینجا تغییراتمون رو اعمال کنیم و پروژه رو مجددا بیلد کنیم.خب بگذریم اینجا یک ایتم مهم وجود داره که اون آدرس روت اصلی پروژه رو مشخص میکنه.به صورت پیشفرض به این شکله:APP_CODE_PATH_HOST=../این داره اشاره میکنه که اگه ما از پوشه laradock خودمون یه مرحله بریم عقب،اونجا روت اصلی پروژه ما هستش.منظورم اینکه ساختار فولدرهامون به این شکله:project
     -laradockخب بعد از این لازمه تا وارد پوشه nginx بشیم،بعدش فولدر sites ‌و از فایل laravel.conf.example یه کپی به این اسم ایجاد میکنیم laravel.conf (حتما توجه کنید کهexample. آخر رو حذف کنید)خب الان وقتش هست تا آدرس های زیر رو توی فایل hosts سیستممون قرار بدیم تا به عنوان آدرس لوکال هاست شناسایی بشن.اگه کاربر ویندوز هستید وارد آدرس زیر بشید.c:\Windows\System32\Drivers\etc\hostsو با یک تکست ادیتور مثل notpad++ اجراش کنید و دوخط زیر رو بهش اضافه کنید.127.0.0.1       localhost
127.0.0.1       laravel.test اگه از کاربرای لینوکس هستید nano رو نصب کنید و با دستور زیر فایل hosts خودتون رو باز کنید:sudo nano /etc/hostsو دوخط زیر رو بهش اضافه کنید.127.0.0.1       localhost
127.0.0.1       laravel.test خب دیگه کارمون تموم هست.رسیدیم به لذت بخش ترین قسمت کار،الان کافیه اسم سرویس هایی که نیاز دارید رو صدا بزنید تا پروژتون بالا بیاد.چون من یه پروژه ساده دارم از دستور زیر استفاده میکنمdocker-compose up  -d --build nginx mysql phpmyadmin مثلا اگه شما توی پروژتون از redis هم استفاده میکردید میتونستید دستور زیر رو بزنید docker-compose up  -d --build nginx mysql phpmyadmin redisخب حالا دیگه باید یه مقدار منتظر بمونید تا مواردی که لازمه دانلود و کانفیگ بشه.ممکنه برای دفعه اول یه مقدار زمانبر باشه اما نگران نباشید دفعه های بعد تنها چندثانیه زمان میبره.اما یه سری تغییرات هم لازمه داخل فایل .env پروژه لاراولی خودتون بدید:DB_HOST=mysql
REDIS_HOST=redis
QUEUE_HOST=beanstalkdتموم شد الان دیگه میتونید لوکال هاست رو باز کنید و صفحه اصلی پروژتون رو ببینید،برای کار با phpmyadmin هم کافیه این آدرس رو باز کنید و با اطلاعات زیر میتونید وارد شید.server : mysql
username: default
password: secretاگه هم نیاز دارید به عنوان کاربر root وارد بشید کافیه یوزرنیم و پسورد رو root وارد کنید.برای اینکه بتونید وارد محیط کامندلاین پروژه بشید و دستورات composer یا artisan رو بزنید هم کافیه دستور زیر رو بزنید docker-compose exec workspace bashحالا دیگه میتونید دستورات خودتون رو وارد کنید و حتی اگه خود پروژه لاراولتون رو هم نصب نکردید حالا خیلی ساده با دستور زیر میتونید اوکیش کنید:composer create-project laravel/laravel .امیدوارم که با موفقیت به این مرحله رسیده باشید:)سوالی داشتید توی کامنت ها بپرسید حتما ?</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Sat, 18 Dec 2021 21:24:18 +0330</pubDate>
            </item>
                    <item>
                <title>ثبت نام و لاگین خودکار در لاراول با اکانت جمیل،گیت هاب و ... با پکیج sociallite</title>
                <link>https://virgool.io/laravel-community/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%84%D8%A7%DA%AF%DB%8C%D9%86-%D8%A8%D8%A7-%D8%AC%D9%85%DB%8C%D9%84-%D9%88-%DA%AF%DB%8C%D8%AA-%D9%87%D8%A7%D8%A8-%D9%88-%D8%A8%D8%A7-socialite-%D8%AF%D8%B1-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84-8-tbodcjqlwmpj</link>
                <description>ثبت نام و لاگین خودکار در لاراول با اکانت جمیل،گیت هاب و ... با پکیج socialliteامروزه میشه گفت تمام کاربران حداقل دارای یک اکانت جمیل هستند،اگر مخاطبین سایت شما برنامه نویسان هستند که بی شک یک اکانت گیت هاب هم دارند.این یه فرصت عالیه تا با کمک کتابخانه socialite  بیاییم و عملیات ثبت نام و لاگین رو برای کاربر تبدیل به یک دکمه کنیم:)در این مقاله با من همراه باشید تا این مورد رو روی یک پروژه پیاده سازی کنیم1-ایجاد یک پروژه جدید لاراولیابتدا با وارد کردن دستور زیر در ترمینال خود اقدام به ساخت یه پروژه جدید میکنیم.composer create-project --prefer-dist laravel/laravel blog2-نصب پکیج Socialite و کانفیگبرای نصب پکیج socialite کافیست دستور زیر را در ترمینال وارد کنید:composer require laravel/socialiteبرای حالا باید اون رو به لیست providers ها و aliases های خودمون داخل فایل config/app.php کنیم.برای این کار وارد فولدر config میشیم و سپس فایل app.php رو باز میکنیم و موارد زیر رو به بخش های مربوطه اضافه میکنیم.&#039;providers&#039; =&gt; [
Laravel\Socialite\SocialiteServiceProvider::class,
]

&#039;aliases&#039; =&gt; [
    &#039;Socialite&#039; =&gt; Laravel\Socialite\Facades\Socialite::class,
]3-ساخت Migrationوارد migration  مربوط به users میشویم و فیلد های زیر را وارد میکنیم(شما میتونید فیلد های اضافی دلخواه خودتون رو اضافه کنید،این یه نمونه ساده تستی هست)public function up()
{
    Schema::create(&#039;users&#039;, function (Blueprint $table) {
        $table-&gt;increments(&#039;id&#039;);
        $table-&gt;string(&#039;name&#039;);
        $table-&gt;string(&#039;email&#039;)-&gt;unique();
        $table-&gt;string(&#039;password&#039;);

        $table-&gt;string(&#039;avatar&#039;)-&gt;nullable();
        $table-&gt;string(&#039;provider&#039;, 20)-&gt;nullable();
        $table-&gt;string(&#039;provider_id&#039;)-&gt;nullable();
        $table-&gt;string(&#039;access_token&#039;)-&gt;nullable();

        $table-&gt;rememberToken();
        $table-&gt;timestamps();
    });
}و در نهایت اجرای دستور زیر برای اجرای migration و ساخت جدول usersphp artisan migrate4-ویرایش Model User:ما قصد داریم فیلد هایی که اضافه کردیم رو مقدار دهی کنیم و برای این کار لازمه تا اونها رو به لیست fillable ها اضافه کنیم،وارد مدل user میشویم و fillable ها رو به این شکل تغییر میدیم.protected $fillable = [
     &#039;name&#039;, &#039;email&#039;, &#039;password&#039;,
     &#039;avatar&#039;, &#039;provider_id&#039;, &#039;provider&#039;,
     &#039;access_token&#039;
];یا اینکه میتونید از guarded استفاده کنید و تنها فیلد id رو محدود کنید و به بقیه فیلد ها دسترسی بدهید.protected $guarded = [&#039;id&#039;];5-اضافه کردن سرویس هاخب حالا قصد داریم تا سرویس های جمیل و گیت هاب رو اضافه کنیم به پروژه خودمون.ابتدا وارد پوشه config میشویم و بعد فایل services.php رو باز میکنیم و قطعه کد زیر که مربوط به سرویس گوگل و گیت هاب هست رو اضافه میکنیم.&#039;google&#039; =&gt; [
    &#039;client_id&#039; =&gt; env(&#039;GOOGLE_CLIENT_ID&#039;),
    &#039;client_secret&#039; =&gt; env(&#039;GOOGLE_CLIENT_SECRET&#039;),
    &#039;redirect&#039; =&gt; &#039;http://linuxtools.ir/login/google/callback&#039;,
],
&#039;github&#039; =&gt; [
    &#039;client_id&#039; =&gt; env(&#039;GITHUB_CLIENT_ID&#039;),
    &#039;client_secret&#039; =&gt; env(&#039;GITHUB_CLIENT_SECRET&#039;),
    &#039;redirect&#039; =&gt; &#039;http://linuxtools.ir/login/github/callback&#039;,
],دو مورد client_id  و client_secret  رو باید از سرویس مدنظر بگیریم که در ادامه میگیریم و مقدار دهی میکنیم و redirect آدرس مسیری هست که زمانی که فرایند احراز هویت انجام شد کاربر به کجا فرستاده بشه.شما میتونید از سرویس های facebook و twitter  هم استفاده کنید مشابه همین موارد،اما توی این مقاله ما قصد این کار رو نداریم اما اشاره ای بهش میکنیم تا اگر قصد استفاده از این سرویس ها رو هم داشتید خیلی ساده پیاده سازی کنید.دریافت اطلاعات مورد نیاز از گوگل و گیت هابدر ادامه ما نیاز به یک client-id و یک client_secret داریم که لازم هست از سرویس های مربوطه(گوگل و گیت هاب) اونها رو تهیه کنیم.ابتدا میریم به سراغ دریافت اونها از گوگل.1-ابتدا فیلترشکن خودتون رو روشن کنین چون متاسفانه سرویس های گوگل برای ما در دسترس نیست.2-وارد این آدرس بشید  و مطابق تصویر زیر وارد قسمت Credentials بشید.3-سپس روی مورد دوم OAuth client ID بزنید(مطابق شکل زیر)4-در این قسمت Name یک نام برای اپلیکیشن قرار میدهیم و آدرس Authoraized redirect URls رو مشابه با آدرسی قرار میدهیم که در فایل services.php برای سرویس مدنظر قرار دادیم تا زمانی که احرازهویت انجام شد به اون آدرس هدایت بشه،و در نهایت در قسمت Authorized Javascript origins آدرس صفحه اصلی وبسایت خودمون رو قرار میدیم(مطابق شکل زیر)در نهایت client_id  و client_secret برای ما به نمایش در میان و ما باید وارد فایل .env پروژه خودمون بشیم و با تعریف کردن 2مقدار جدید،اونها رو با اطلاعات دریافتی مقدار دهی کنیم.مشابه کد زیر:GOOGLE_CLIENT_ID=&quot;cliend_id&quot;GOOGLE_CLIENT_SECRET=&quot;secret_id&quot;خب کار ما با سرویس گوگل تمام هست،حالا میریم به سراغ گیت هاب:1-ابتدا وارد این آدرس میشویم2-و از قسمت OAuth Apps روی دکمه New OAuth Apps میزنیم(مشابه تصویر زیر)3-در این بخش در قسمت Application Name یک نام برای اپلیکیشن خود در نطر میگیریم(این نام نمایشی برای کاربر هست) و در قسمت HomePage URL آدرس صفحه اصلی وبسایت خودمون رو قرار میدیم و در نهایت در قسمت Authorization callback URL آدرس صفحه رو مشابه با آدرسی قرار میدهیم که در فایل services.php برای سرویس مدنظر قرار دادیم تا زمانی که احرازهویت انجام شد به اون آدرس هدایت بشه.4-در این بخش client_idبرای شما نمایش داده شده و برای نمایش و ساخت یک secret هم کافیه روی دکمه Generate a new client Secret میزنیم(مشابه تصویر زیر)5-حالا وارد فایل .env پروژه خودمون میشیم و 2تا متغییر جدید مشابه کد زیر تعریف میکنیم و مقادیر اون رو برابر قرار میدیم با مقادیری که از گیت هاب دریافت کردیم:و ما باید وارد فایل .env پروژه خودمون بشیم و با تعریف کردن 2مقدار جدید،اونها رو با اطلاعات دریافتی مقدار دهی کنیم.مشابه کد زیر:GITHUB_CLIENT_ID=&amp;quotcliend_id&amp;quot
GITHUB_CLIENT_SECRET=&amp;quotsecret_id&amp;quotخب کار با ما سرویس ها تموم هست و میشه گفت 70درصد کار رو با موفقیت انجام دادیم:)6-ساخت روت هاحالا نیاز هست تا وارد فایل پوشه routes بشیم و سپس درون فایل Web.php روت های زیر رو اضافه کنیم(شما میتونید اونها رو شخصی سازی کنید)Route::get(&#039;auth/social&#039;, &#039;Auth\LoginController@show&#039;)-&gt;name(&#039;social.login&#039;);
Route::get(&#039;oauth/{driver}&#039;, &#039;Auth\LoginController@redirectToProvider&#039;)-&gt;name(&#039;social.oauth&#039;);
Route::get(&#039;oauth/{driver}/callback&#039;, &#039;Auth\LoginController@handleProviderCallback&#039;)-&gt;name(&#039;social.callback&#039;);7-ساخت کنترلرابتدا با استفاده از دستور زیر یک کنترلر ایجاد میکنیمphp artisan make:controller LoginControllerو حالا به کنترلی که ایجاد کردیم و متد های زیر براش ایجاد میکنیم.class LoginController extends Controller
{

  public function __construct()
  {
      $this-&gt;middleware(&#039;guest&#039;);
    }
   protected $providers = [
     &#039;github&#039;,&#039;google&#039;
];

public function show()
    {
        return view(&#039;auth.login&#039;);
    }
public function redirectToProvider($driver){
          if( ! $this-&gt;isProviderAllowed($driver) ) {
                return $this-&gt;sendFailedResponse(&amp;quot{$driver} is not currently supported&amp;quot);
        }
     try {
        return Socialite::driver($driver)-&gt;redirect();
        } catch (Exception $e) {
          // You should show something simple fail message
            return $this-&gt;sendFailedResponse($e-&gt;getMessage());
     }
  }  
public function handleProviderCallback( $driver )
  {
   try {
            $user = Socialite::driver($driver)-&gt;user();
        } catch (Exception $e) {
            return $this-&gt;sendFailedResponse($e-&gt;getMessage());
        }
    // check for email in returned user
     return empty( $user-&gt;email )
            ? $this-&gt;sendFailedResponse(&amp;quotNo email id returned from {$driver} provider.&amp;quot)
            : $this-&gt;loginOrCreateAccount($user, $driver);
  }
  protected function sendSuccessResponse()
 {
       return redirect()-&gt;intended(&#039;home&#039;);
    }
protected function sendFailedResponse($msg = null)
    {
        return redirect()-&gt;route(&#039;social.login&#039;)
            -&gt;withErrors([&#039;msg&#039; =&gt; $msg ?: &#039;Unable to login, try with another provider to login.&#039;]);
    }
    protected function loginOrCreateAccount($providerUser, $driver)
    {
        // check for already has account
        $user = User::where(&#039;email&#039;, $providerUser-&gt;getEmail())-&gt;first();
        // if user already found
        if( $user ) {
            // update the avatar and provider that might have changed
          $user-&gt;update([
                &#039;avatar&#039; =&gt; $providerUser-&gt;avatar,
                &#039;provider&#039; =&gt; $driver,
              &#039;provider_id&#039; =&gt; $providerUser-&gt;id,
              &#039;access_token&#039; =&gt; $providerUser-&gt;token
           ]);
        } else {
         // create a new user
            $user = User::create([
                &#039;name&#039; =&gt; $providerUser-&gt;getName(),
                &#039;email&#039; =&gt; $providerUser-&gt;getEmail(),
                &#039;avatar&#039; =&gt; $providerUser-&gt;getAvatar(),
               &#039;provider&#039; =&gt; $driver,
                &#039;provider_id&#039; =&gt; $providerUser-&gt;getId(),
                &#039;access_token&#039; =&gt; $providerUser-&gt;token,
                // user can use reset password to create a password
                &#039;password&#039; =&gt; &#039;&#039;&amp;quot
            ]);
        }
       Auth::login($user, true);
      return $this-&gt;sendSuccessResponse();
    }
   private function isProviderAllowed($driver)
   {
       return in_array($driver, $this-&gt;providers) &amp;&amp; config()-&gt;has(&amp;quotservices.{$driver}&amp;quot);
  }
}خب دیگه کار حدودا تموم هست:) حالا وقتشه تا وارد صفحات Blade خودمون بشیم و یک دکمه ایجاد کنیم.8-ساخت دکمه ها در صفحه وورد و ثبت نام(مرحله آخر)خب وارد Blade مربوط به صفحه ورود و ثبت نام خودمون میشیم و این قطعه کد رو اضافه میکینم که مربوط به دکمه های وورد خودکار جمیل و گیت هاب هست.&lt;a href=&amp;quot{{ route(&#039;social.oauth&#039;, &#039;google&#039;) }}&amp;quot class=&amp;quotbtn btn-danger btn-block&amp;quot&gt;
            Login with Google
       &lt;/a&gt;
&lt;a href=&amp;quot{{ route(&#039;social.oauth&#039;, &#039;github&#039;) }}&amp;quot class=&amp;quotbtn btn-default btn-block&amp;quot&gt;
              Login with Github
   &lt;/a&gt;خسته نباشید.الان میتونید پروژه خودتون رو روی سرور ببرید و تست کنید و از این امکان فوق العاده لذت ببرید.نکته:فقط روی هاست یا سرور تست بفرمایید ممکنه روی لوکال نتیجه مطلوب و موردنظر رو نده:)ممنونم که با من همراه بودید،سوالی بود داخل کامنت ها بپرسید حتما جواب میدم.</description>
                <category>افشین توکلیان | Afshin Tavakolian</category>
                <author>افشین توکلیان | Afshin Tavakolian</author>
                <pubDate>Wed, 28 Apr 2021 08:23:32 +0430</pubDate>
            </item>
            </channel>
</rss>