راکت
حل شده

ایجاد دو روت متفاوت برای لاگین

9 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

9
مهران مرندی
مهران مرندی
@mehranmarandi

تخصص: برنامه نویس

بهترین پاسخ

به این کار Multiauth گفته میشه و در اجرای پروژه های متوسط و بزرگ خیلی رایجه، بطور مثال شما سرویسی ارائه میدید که کارمندان خودتون هم از اون سرویس استفاده میکنن، و علاوه بر اینکه در نقش کاربر ادمین دسترسی هایی دارند، در نقش کاربر عادی هم از سرویس استفاده میکنن، مثل اسنپ، دیجیکالا و...
در این حالت یه راهکار استفاده از دو جدول Authenticate هست مثلا دو جدول admins و users، پکیج های آماده ای برای این کار وجود داره ولی پیاده کردن این ویژگی در خود لاراول هم پیش بینی شده و کار سختی نیست
ابتدا جدول دوم با نام Admins رو با فیلد های اولیه جدول user ایجاد کنید.
مدل admin رو از Authenticatable بسازید


<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
    use Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];
}

حالا در فایل config/auth.php گارد جدید ادمین ها رو اضافه کنید


<?php

return [

    'defaults' => [
        'guard' => 'web',
        'passwords' => 'users',
    ],

    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],

        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ]
    ],

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ]

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

    'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],

        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

];

برای کنترل دسترسی های کاربران ادمین متونی همه اون ها رو در یک گروه، با namespace ادمین قرار بدی

Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
  //CODES...
});

حالا هر جا هم خواستی کاربری رو احراز هویت کنی باید گارد مربوط به اون کاربر رو مشخص کنی
مثال

Auth::guard(‘admin’)
رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

سلام.
هدفتون از انجام این کار چیه؟

علیرضا کفایتی
علیرضا کفایتی
@alirezakefayati

تخصص: برنامه نویس laravel, vue.js

سلام
میشه بپرسم دقیقا چرا ؟؟؟
منظورتان این است که مثلا در ورود به پنل ادمین نیاز باشه دوباره یک نام کاربری و رمزی رو بزنه که خیلی مشکلی نداره .
ولی اگر ....

شاید پاسخ شما همین‌جا باشد

سبحان مولایی
سبحان مولایی
@websaz

تخصص: برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native

سلام شما باید از guard ها استفاده کنید نحوه استفاده در این اموزش گفته شده.
لینک

مهدی
مهدی
@mahdidv

تخصص: Backend Developer

@rezajahangir
ادرس لاگین پنل ادمین با پنل کاربر متفاوت باشه

مهدی
مهدی
@mahdidv

تخصص: Backend Developer

@gomnam
میخوام ادرس لاگین پنل ادمین با پنل کاربر متفاوت باشه

مهدی
مهدی
@mahdidv

تخصص: Backend Developer

@websaz
من از پکیج spatie permission استفاده کردم

رضا جهانگیر
رضا جهانگیر
@rezajahangir

تخصص: Full-Stack Developer

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

سبحان مولایی
سبحان مولایی
@websaz

تخصص: برنامه‌نویس وب: Python :: Django :: Node :: Php :: Laravel :: JS :: React :: React Native

خوب مشکل کجاست دوتا route ایجاد می کنید مثلا به نام های:

/login
/admin/login

برای هرکدوم یک view درست می کنید و لاگین می کنید اما با این تفاوت که در هنگام چک کردن برای روت ادمین باید ادمین بودن کاربر ( براساس permission) چک بشه

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

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