JBolouri
4 سال پیش توسط JBolouri مطرح شد
11 پاسخ

تفکیک ریدایرکت فرم لاگین یوزر و فرم لاگین ادمین

سلام دوستان...

توی لاراول برای هر نوع یوزر یه گارد مخصوص دارم.. کاربر عادی و ادمین..

دوتا جدول متفاوت دارن و لاگین هردوشون هم درست کار میکنه..

ببینید آدرس لاگینشون اینطوریه

کاربر عادی

/login

ادمین

 /admin/login

حالا مشکلی که هست وقتی کاربر عادی لاگین میشه بعدش علاوه بر این که در حالتی که لاگینم، اگر بخوام به فرم لاگین یوزر برم ریدایرکت میکنه بلکه حتی بخوام به فرم لاگین ادمین هم برم بازم ریدایرکت میکنه در صورتی که باید فرم لاگین ادمین رو نشون بده چون این دوتا کاربر به هم ربطی ندارن..

برای ادمین هم همینطوره.. یعنی وقتی با تایپ ادمین لاگین میکنم بعدش توی سایت وقتی میخوام وارد فرم لاگین یوزر عادی بشم منو ریدایرکت میکنه و تنها وقتی میتونم واردش بشم که از ادمین خارج بشم..

همین مشکل رو چجوری حلش کنم که تفکیک رو قائل بشه؟


ثبت پرسش جدید
حسن حکمتی
تخصص : برنامه نویس وب و بلاکچین
@hekmati 4 سال پیش مطرح شد
1

سلام
با توجه به تایپ یوزر شما نمیتونید همزمان بین دو حالت سویچ کنید، بقیه پرسشتون خیلی شفاف نیست، حالا روت ادمین و کاربر معمولی در یک صفحه هستند یا در دو صفحه؟ در سرویس پرووایدر چطور اون ها رو مشخص کردید؟
همچنین اگر در یک صفحه روت ها رو نوشتید می تونید براشون name اختصاصی بنویسید یا ترتیب مسیرها رو هم جابجا کنید.


احسان قربانی
تخصص : PHP ، در حال یادگیری لاراول ،...
@TimeRunner2359 4 سال پیش مطرح شد
0

@javadbolouri72
سلام و وقت بخیر
من خیلی لاراول کار نمیکنم ، ولی یه سوال
از کجا میفهمید که کاربر لاگین کرده ؟ سشن یا کوکی ست میکنید دیگه ؟
اگر آره ، ممکنه که مشکل از تشابه اسمی این دو سشن باشه ؟؟


علی بیات
تخصص : توسعه دهنده ارشد وب
@ali.bayat 4 سال پیش مطرح شد
1

به خاطر میدلور Guest هست که لاراول روی این Route ها اعمال میکنه.

منطقی هم هست.
کاربری که به هر شکلی لاگین میشه نباید بتونه دیگه فرم لاگین رو ببینه.
()Auth::routes رو بررسی کن و میدلور Guest رو از روی Route های login بردار .. باید مشکل حل بشه


JBolouri
@javadbolouri72 4 سال پیش آپدیت شد
0

این کدایی هست که داخل میدل ور RedirectifAuthenticated قرار دادم..

public function handle($request, Closure $next, $guard = null)
    {

        if(Auth::guard('admin')->check()){
            return redirect() ->route('admin.dashboard');
        }
        else if(Auth::guard('web')->check()){
            return redirect('/');
        }

        return $next($request);
    }

ببینید همه چی درست کار میکنه، هر نوع یوزر سر جای خودش لاگین میتونه بشه و اگر با یوزر عادی لاگین کنم دسترسی به بخش ادمین ندارم و همه اینا درست کار میکنه...

فقط مشکل اینه..

اگر با یوزر عادی لاگین کنم(و با یوزر ادمین روی گارد ادمین لاگین نباشم)، حالا وقتی بخوام برم به صفحه لاگین ادمین، منو ریدایرکت میکنه به صفحه اصلی سایت...

اگر با یوزر ادمین لاگین کنم(و با یوزر عادی روی گار عادی لاگین نباشم)، حالا وقتی بخوام برم به صفحه لاگین عادی، منو ریدایرکت میکنه به دشبورد ادمین..

در صورتی که وقتی مثلا با یوزر عادی وارد شدم فقط لاگین عادی رو ریدایرکت باید بکنه نه لاگین ادمین رو..

@ali.bayat
@hekmati


JBolouri
@javadbolouri72 4 سال پیش آپدیت شد
1

@TimeRunner2359

خود لاراول سیستم احراز هویت داره که وقتی ازش تو پروژه استفاده کنیم تشخیص لاگین بودن و این چیزا رو خودش میده و کد نویسی اضافی نمیخواد.

و توی برای احراز هویت چند گانه برای هر نوع یوزر و جدول میشه گارد جدا تعریف کرد که تفکیک قائل بشه.. و تو شرط ها هم قید کنیم گارد رو تا بفهمه.


JBolouri
@javadbolouri72 4 سال پیش آپدیت شد
0

میخوام همزمان توی یه مرورگر هم بتونم با گارد یوزر وارد پنلش بشم و هم با گارد ادمین وارد پنل خودش..

با گارد ادمین که لاگین کردم فقط باید صفحه لاگین ادمین رو ریدایرکت کنه نه لاگین یوزر رو..

وقتی با ادمین لاگین هستم قاعدتا باید بتونم به صفحه لاگین یوزر عادی دسترسی داشته باشم. مشکلم اینجاست که نمیشه اونم ریدایرکت میکنه..

همین قضیه برای گارد یوزر عادی هم هست..

اینو چطوری میتونم حلش کنم؟


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
1

سلام - جواب آقای بیات درست بود - توی آدرس زیر

App\Http\Controllers\Auth

توی کنترلر LoginController توی تابع سازندش ( که قبل از اجرای هر دستوری یا تابعی، اول این تابع اجرا میشه)

public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش آپدیت شد
1

(درسته که کلا پیاده سازی دیتابیس کاملا به خودتون ربط داره و هر جور که دوست داشته باشین میتونین پیاده سازی کنین اما)
یک نکته رو بگم که این نوع پیاده سازی کاملا اشتباست، و شما کافیه با گذاشتن یک فیلد به نام level توی جدول user نوع اون کاربر(ادمین - کاربر معمولی، و ....) رو پیاده سازی کنین و با استفاده از تعریف permission سطح دسترسی برای اون ها تعیین کنید.

البته من خودم توی یک پروژم(که انواع کاربر دارم) در کلاس logincontroller بعد از لاگین کردن کاربر(حالا هر نوعی که هست) ، اون رو به پنل مورد نظرش ریدایرکت میکنم و با توجه به اینکه روت های مربوط به هر نوع کاربر رو توی یک routegroup گذاشتم و برای اون روت گروپ یک middleware گذاشتم که فیلدlevel رو برررسی میکنه و بدین صورت ساده یک نوع سطح دسترسی برای انواع کاربرهام پیاده سازی کردم.

و توجه داشته باش که شما اگه خواستی یک روزی پروژه ات رو اپدیت کنی، مثلا کلا بخای زبان بک اندت رو عوض کنی، یا مثلا ورژن بالای لاراول اومد و خواستی پروژه ات رو به ورژن بالاتر لاراول ارتقا بدی، همه ی اینها امکان پذیره اما به شرطی که دیگه نیازی نباشه دیتابیست رو تغییر بدی( خلاصه کلام تجربه شخصیم توی چند تا پروژه که نوشتم اینه که پیاده سازی دیتابیس خیلی مبحث مهمیه)


JBolouri
@javadbolouri72 4 سال پیش مطرح شد
0

@mohsen.mehri6101

ممنون بابت توضیحاتتون

الان این کدایی که گفتید توی تابع سازندش میدل ور guest رو اعمال میکنه، من متوجه نشدم باید چیکار کنم.. میگید برش دارم؟

همینو نمیشه بهش بگیم که guest روی گارد admin اگر بود یا مثلا اگر روی گارد web بود بیاد با شرط تفکیک کنه؟

یخورده گیج شدم از این قضیه که گفتید و آقای بیات هم گفتن


JBolouri
@javadbolouri72 4 سال پیش مطرح شد
0

@mohsen.mehri6101

منظورم اینه نمیشه مشخص کرد که این guest برای گارد ادمین guest هست یا یوزر؟ که بعدش با شرط یه کارای بشه کرد


محسن مهری
تخصص : برنامه نویس back-end با زبان...
@mohsen.mehri6101 4 سال پیش مطرح شد
0

@javadbolouri72
سلام دوست عزیز واقعا نحوه پرسش سوالتون مبهمه
یک لطفی بکنین خط کد های مربوط به (روت ها و توابع مربوط) login برای دو نوع کابرتون رو اینجا بگذارین


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام