راکت
JBolouri
JBolouri
توسط JBolouri مطرح شد
11 پاسخ

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

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

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

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

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

کاربر عادی

/login

ادمین

 /admin/login

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

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

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


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

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


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

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


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

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

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


JBolouri
JBolouri
@javadbolouri726 سال پیشمطرح شد
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
JBolouri
@javadbolouri726 سال پیشمطرح شد
1

@TimeRunner2359

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

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


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

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

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

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

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

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


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

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

App\Http\Controllers\Auth

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

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

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

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

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

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


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

@mohsen.mehri6101

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

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

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

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


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

@mohsen.mehri6101

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


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

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


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

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