محمدرضا عطوان
4 سال پیش توسط محمدرضا عطوان مطرح شد
6 پاسخ

استفاده از Laravel Passport در حالت Multi Auth

با سلام و احترام خدمت دوستان
با توجه به اینکه در لاراول با انجام تغییراتی میشه چند Auth برای پروژه ایجاد کرد، اما وقتی که بخوایم برای پنل هر کدومشون مثل ادمین و کاربر از vuejs و به دنبال اون از laravel passport استفاده کنیم با مشکل توسعه ی passport مواجه میشیم که اون مثلا فقط برای جدول user ها طراحی شده.
حالا میخواستم ببینم کسی از دوستان تا حالا به این مشکل برخورده؟
آیا فقط با افزودن مثلا admin_id و... در جداول پایگاه داده passport میشه از passport برای چند پنل استفاده کرد یا باید کار دیگه ای انججام بدیم؟
ممنونم


لاراول
تگ‌های محبوب
لاراول
php
laravel
متفرقه
reactjs
عمومی
html_css
nodejs
vuejs
وردپرس
پایتون
css
فلاتر
react
javascript
ثبت پرسش جدید
محمود مریدسادات زاده
تخصص : laravel
@moridsadat 2 سال پیش مطرح شد
0

آسون ترین راه ممکن هیچ کار خاصی لازم نیست انجام بدین. اول باید توی config/auth.php بخش guards

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
 'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],

        'customers' => [
            'driver' => 'passport',
            'provider' => 'customers',
            'hash' => false,
        ],

    ], 

و در ادامه باید اون provider که معرفی انتخاب کردین در همین فایل config/auth.php معرفی کنید

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

حالا در مدل مورد نظر همون کاری که برای پاسپورت انجام دادین

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens; 
class Customer extends Authenticatable
{
    use HasApiTokens, Notifiable;
.
.
.

حالا برای استفاده شما مثل این هست که یک middleware جدید ساختید به راحتی از اون استفاده کنید.

 Route::group(['middleware' => 'auth:customers'], function () {
    });

تموم شد. شما الان میتونید هرچند تا مدل خواستین برای passport استفاده کنید.

وقتی از

Auth::user() 

هم استفاده میکنید مدل مورد نظر رو برمیگردونه.


vahid Mohammadi
@viva.mohammadi 4 سال پیش مطرح شد
0

@mratwan

سلام
اون مثلا فقط برای جدول user ها طراحی شده === این جمله درست نیست حالت پیش فرضش جدول userهست
آیا فقط با افزودن مثلا admin_id و... در جداول پایگاه داده passport میشه از passport برای چند پنل استفاده کرد == میشه ولی استاندارد نیست و زحمت شما رو بیشتر میکنه
باید کار دیگه ای انججام بدیم؟ === بله شما باید یک گارد و میدلور مخصوص برای admins درست کنید دقیقا مراحلی که لازم هست در مقاله زیر آورده شده

https://medium.freecodecamp.org/multiple-authentication-in-laravel-5-6-admin-and-user-3b3efe6da999

محمدرضا عطوان
@mratwan 4 سال پیش مطرح شد
0

@viva.mohammadi عزیز
سلام
ممنونم به خاطر وقتی که گذاشتید
من کاملا با ساخت گارد و میدلور برای سطوح مختلف کاربر آشنایی دارم ولی با توجه به اینکه قابلیت passport به صورت پیشرض برای user ها هست، خواستم بدونم بعد از این که ما مراحل
https://medium.freecodecamp.org/multiple-authentication-in-laravel-5-6-admin-and-user-3b3efe6da999
رو انجام دادیم، برای passport چه کاری باید کرد؟
فرض کنید به این صورت

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

        'api-admin' => [
            'driver' => 'token',
            'provider' => 'admins',
        ],

ادمین ساختیم. حالا در جداول _oauth باید خودمون مثلا admin_id اضافه کنیم و یا باید دستی فایل های laravel passportرو در packege ش ادیت کنیم؟


vahid Mohammadi
@viva.mohammadi 4 سال پیش مطرح شد
0

@mratwan
بیبینید من خیلی شاید منظورتون رو درست متوجه نشده باشم ولی کارهایی که خودم انجام دادم رو در زیر میارم
من یک کنترلر(adminController) در لاراول ایجاد کردم و در متد سازنده اش به شکل زیر عمل کردم

  public function __construct()
    {
        $this->middleware('auth:admin');
    }

از اینجا به بعد در هرجای کنترلرم من وقتی بخوام admin رو بشناسم از Auth::user() استفاده می کنم


محمدرضا عطوان
@mratwan 4 سال پیش مطرح شد
0

@viva.mohammadi
شما کاملا درست می فرمایید ولی من منظورم اینه که وقتی بخوایم از لاراول پاسپورت استفاده کنیم id جدول ادمین با id جدول یوزر فرق میکنه و لاراول پارپورت در جداول oauth خودش که پس از نصبش در پایگاه داده ایجاد میکنه فقط فیلد user_id داره!
حالا میخوام ببینم اگر کسی در حالت مثلا روت api برای ارتباط با لاراول پاسپورت برای ادمینی که قبلا ایجاد کرده چطوری id ادمین رو با توجه به اینکه الان دیگه در جدول users نیست برای پاسپورت ثبت کرده؟


vahid Mohammadi
@viva.mohammadi 4 سال پیش مطرح شد
2

@mratwan
امیدوارم پکیج زیر بتونه مشکلتون رو حل کنه

https://github.com/sfelix-martins/passport-multiauth

محمود مریدسادات زاده
تخصص : laravel
@moridsadat 2 سال پیش مطرح شد
0

آسون ترین راه ممکن هیچ کار خاصی لازم نیست انجام بدین. اول باید توی config/auth.php بخش guards

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
 'api' => [
            'driver' => 'passport',
            'provider' => 'users',
            'hash' => false,
        ],

        'customers' => [
            'driver' => 'passport',
            'provider' => 'customers',
            'hash' => false,
        ],

    ], 

و در ادامه باید اون provider که معرفی انتخاب کردین در همین فایل config/auth.php معرفی کنید

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

حالا در مدل مورد نظر همون کاری که برای پاسپورت انجام دادین

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Passport\HasApiTokens; 
class Customer extends Authenticatable
{
    use HasApiTokens, Notifiable;
.
.
.

حالا برای استفاده شما مثل این هست که یک middleware جدید ساختید به راحتی از اون استفاده کنید.

 Route::group(['middleware' => 'auth:customers'], function () {
    });

تموم شد. شما الان میتونید هرچند تا مدل خواستین برای passport استفاده کنید.

وقتی از

Auth::user() 

هم استفاده میکنید مدل مورد نظر رو برمیگردونه.


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

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