مهدی
3 سال پیش توسط مهدی مطرح شد
9 پاسخ

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

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


ثبت پرسش جدید
مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

به این کار 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’)

رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

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


علیرضا کفایتی
تخصص : برنامه نویس laravel, vue.js
@alirezakefayati 3 سال پیش مطرح شد
0

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


سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

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


مهدی
تخصص : Backend Developer
@mahdidv 3 سال پیش مطرح شد
0

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


مهدی
تخصص : Backend Developer
@mahdidv 3 سال پیش مطرح شد
0

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


مهدی
تخصص : Backend Developer
@mahdidv 3 سال پیش مطرح شد
0

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


رضا جهانگیر
تخصص : Full-Stack Developer
@rezajahangir 3 سال پیش مطرح شد
0

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


مهران مرندی
تخصص : برنامه نویس
@mehranmarandi 3 سال پیش آپدیت شد
0

به این کار 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’)

سبحان مولایی
تخصص : برنامه‌نویس وب: Python ::...
@websaz 3 سال پیش مطرح شد
0

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

/login
/admin/login

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


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

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