اذهب إلى المحتوى

السؤال

نشر

سلام عليكم 

استخدم php 8 ولارافل 8 

عندي dashboard ينبغي عمل login للدخول اليها 

استخدم الdefault guard الخاص بلارافل 'web' الذي يقرأ من جدول users 

اريد استخدام بنفس الوقت teachers guard الذي يقرأ من جدول teachers 

يعني عند تسجيل الدخول سيُدخل المستخدم البريد الالكتروني وكلمة السر.. اريد بدلا من جعل لارافل يبحث بالمعطيات في جدول users فقط.. اريده يبحث في جدول users وجدول teachers بنفس الوقت فهل هذا ممكن؟

Recommended Posts

  • 0
نشر

وعليكم السلام @محمود رضا موسى 

بالتأكيد هذا ممكن ,لكن يوجد عدة أكواد يجب كتابتها وعمل middleware وcontrollers وجدول في قاعدة البيانات ,الأن نأتي لجزء البرمجة 

أولاً يجب أن تقوم بعمل جدول teachers مثل جدول users إن لم تكن قد عملت واحد .بعد ذلك نقوم بعمل Auth Controllers للteachers مشابه لتلك الموجودة إفتراضياً في المسار app/Http/Controllers/Auth/AuthController 
بعد ذلك نقوم Authenticating guards في ملف auth.php داخل مجلد config هكذا 

Route::group(['middleware' => ['web']], function () {
    //Login Routes...
    Route::get('/teacher/login','TeacherAuth\AuthController@popupLoginForm');
    Route::post('/teacher/login','TeacherAuth\AuthController@login');
    Route::get('/teacher/logout','TeacherAuth\AuthController@logout');

    // Registration Routes...
    Route::get('teacher/register', 'TeacherAuth\AuthController@popupRegistrationForm');
    Route::post('teacher/register', 'TeacherAuth\AuthController@register');

    Route::get('/teacher', 'TeacherController@index');

});  

والأن في AuthController.php في المسار TeacherAuth/AuthController.php أضف ميثودز عدد 2 لإظهار نموذج الدخول و نموذج التسجيل هكذا 
 

protected $redirectTo = '/teacher';
protected $guard = 'teacher';
public function popupLoginForm()
{
    if (view()->exists('auth.authenticate')) {
        return view('auth.authenticate');
    }

    return view('teacher.auth.login');
}
public function popupRegistrationForm()
{
    return view('teacher.auth.register');
}  

وقبل الجزء الأخير نقوم بعمل middleware للـ teacher هكذا 

class RedirectIfNotTeacher
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = 'teacher')
{
    if (!Auth::guard($guard)->check()) {
        return redirect('/');
    }

    return $next($request);
}
}

أخيراً نقوم بتسجيل ال middleware في الkernal هكذا في ملف kernel.php كالتالي

protected $routeMiddleware = [
    'teacher' => \App\Http\Middleware\RedirectIfNotTeacher::class,
];


هكذا يمكنك عمل Multi Auth او مصادقة لأكثر من جدول في نفس الوقت :)

 

  • 1
نشر

بعدما تقوم بإنشاء جدول teachers يجب عليك القيام ببعض الخطوات و هي كالتالي : 

إنشاء مودل خاص بهذا الجدول وليكن باسم مثلاً Teacher.php  ويمكن إنشاء المودل عن طريق الأمر التالي 

php artisan make:model Teacher

ومن ثم تقوم بفتح هذا الملف و إضافة له guard الذي سيكون خاص به عن طريق إضافة السطر التالي إلى الملف 

protected $guard = "teacher";

مع إضافة مصفوفة fillable$ للحقول الذي تنتمي لهذا الجدول 

protected $fillable = ['name', 'email', 'password'];

ثم تقوم بإنشاء guard جديد لهذا الجدول وليكن اسمه teacher عن طريق الدخول إلى الملف التالي 

config\auth.php

وبداخل مصفوفة guards نضيف guard الجديد

'teacher' => [
	'driver' => 'session',
	'provider' => 'teachers',
],

ثم في نفس الملف في مصفوفة providers نقوم بإضافة provider جديد 

'teachers' => [
  'driver' => 'eloquent',
  'model' => App\Teacher::class,
],

ثم يمكنك إنشاء متحكم جديد وليكن مثلاً باسم TeacherController.php عن طريق الأمر التالي 

php artisan make:controller Auth\TeacherController

نقوم بفتح هذا الملف و من ثم إضافة عملية تسجيل الدخول إليه عن طريق الكود التالي ,بحيث نقوم بإضافة guard الذي نود أن يكون مسؤول عن عملية تسجيل الدخول 

Auth::guard('teacher')->attempt(['email' => $request->email, 'password' => $request->password]);

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...