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

السؤال

نشر

السلام عليكم بعد تسجيل دخول لا يذهب مستخدم لصفحة index ما حل مشكلة 

<?php

use App\Http\Controllers\DepartmentController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\StudentController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ProposalController;
use App\Http\Middleware\RoleMiddleware;

Route::get('/',function(){
      return view('auth.login');
});
Route::middleware([RoleMiddleware::class.':student,supervisor,admin'])->group(function () {
    Route::resource('proposal', ProposalController::class);
    Route::resource('students', StudentController::class);
    Route::resource('departments', DepartmentController::class);
  
});
Route::get('/index', function () {
    return view('index');
})->middleware(['auth'])->name('index');
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
use Illuminate\Support\Facades\Auth;
class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Closure(\Illuminate\Http\Request): (\Symfony\Component\HttpFoundation\Response)  $next
     */
    public function handle(Request $request, Closure $next,...$roles): Response
    {
          if (!Auth::check()) {
            // إذا لم يكن المستخدم مسجل دخول
            return redirect()->route('login');
        }

        $user = Auth::user();

       
        if (!in_array($user->role, $roles)) {
            abort(403, 'غير مسموح لك بالدخول');
        }

        return $next($request);
    }
}

 

<?php

namespace App\Providers;

use Illuminate\Support\Facades\Route;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;

class RouteServiceProvider extends ServiceProvider
{
    /**
     * هذا هو المكان الذي يذهب إليه المستخدم بعد تسجيل الدخول
     */
    public const HOME = '/index';

    /**
     * تسجيل جميع Routes هنا
     */
    public function boot(): void
    {
        $this->routes(function () {
            Route::middleware('web')
                ->group(base_path('routes/web.php'));

            Route::prefix('api')
                ->middleware('api')
                ->group(base_path('routes/api.php'));
        });
    }
}

 

Recommended Posts

  • 0
نشر

وعليكم السلام ورحمة الله وبركاته .

أين هي مسارات تسجيل الدخول ؟ هل تستخدم مسارات خاصة بك أم تستخدم المسارات الخاصة ب Laravel ؟

إذا كنت تستخدم تسجيل دخول مخصص (AuthController) فيجب أن تعيد التوجيه بنفسك حيث السطر التالي يعمل فقط مع مسارات لارافيل :

بتاريخ 9 دقائق مضت قال ايمن ميلاد:
    public const HOME = '/index';

يرجى توضيح مسارات تسجيل الدخول إو إرفاق ملف المشروع.

  • 0
نشر
بتاريخ 1 دقيقة مضت قال ايمن ميلاد:

استخدم لارافيل جيت ستريم 

هل يمكنك إرفاق ملف web.php كاملا

  • 0
نشر
<?php

use App\Http\Controllers\DepartmentController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\StudentController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ProposalController;
use App\Http\Middleware\RoleMiddleware;

Route::get('/',function(){
      return view('auth.login');
});
 Route::middleware([RoleMiddleware::class.':student,supervisor,admin'])->group(function () {
     Route::resource('proposal', ProposalController::class);
    Route::resource('students', StudentController::class);
    Route::resource('departments', DepartmentController::class);
  
});
Route::middleware(['auth'])->group(function () {
    Route::get('/index', function () {
        return view('index');
    })->name('index');
});

 

gpms.rar

هل مكتبة جيت ستريم نازلة كاملة او لا لأنه ينزل معاها مجلد auth  كاملا 

  • 0
نشر
بتاريخ 4 دقائق مضت قال ايمن ميلاد:
<?php

use App\Http\Controllers\DepartmentController;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\ProfileController;
use App\Http\Controllers\StudentController;
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\AuthController;
use App\Http\Controllers\ProposalController;
use App\Http\Middleware\RoleMiddleware;

Route::get('/',function(){
      return view('auth.login');
});
 Route::middleware([RoleMiddleware::class.':student,supervisor,admin'])->group(function () {
     Route::resource('proposal', ProposalController::class);
    Route::resource('students', StudentController::class);
    Route::resource('departments', DepartmentController::class);
  
});
Route::middleware(['auth'])->group(function () {
    Route::get('/index', function () {
        return view('index');
    })->name('index');
});

 

بما أنك تستخدم Laravel Jetstream فعملية إعادة التوجيه بعد تسجيل الدخول لا تعتمد على RouteServiceProvider كما كان في Laravel الأساسي و Jetstream يستخدم Fortify لإدارة تسجيل الدخول.

لذلك حتى لو كتبت:

public const HOME = '/index';

فلن يعمل .

والسبب أن Jetstream بعد تسجيل الدخول يوجه المستخدم إلى dashboard وبينما أنت لا تملك route باسم dashboard لذلك لا يتم تحويل المستخدم إلى index.

لهذا الحل الأبسط هو جعل dashboard هي نفسها index :

Route::middleware(['auth'])->group(function () {
    Route::get('/dashboard', function () {
        return view('index');
    })->name('dashboard');
});

أو الحل الثاني هو فتح ملف config/fortify.php وابحث عن المفتاح 'home' تأكد أنه يستخدم الثابت الموجود في RouteServiceProvider بالشكل التالي:

'home' => App\Providers\RouteServiceProvider::HOME,

وفي بعض الأحيان حسب إصدار لارافيل لديك قد يكون التوجيه ثابتاً داخل الـ Middleware. افتح الملف:

app/Http/Middleware/RedirectIfAuthenticated.php

وتأكد من أن دالة handle تقوم بالتوجيه إلى الثابت الصحيح بدلاً من مسار ثابت مكتوب يدوياً (مثل '/dashboard'). يجب أن تبدو هكذا:

public function handle(Request $request, Closure $next, string ...$guards): Response
{
    $guards = empty($guards) ? [null] : $guards;

    foreach ($guards as $guard) {
        if (Auth::guard($guard)->check()) {
            return redirect(RouteServiceProvider::HOME); // تأكد من وجود هذا السطر
        }
    }

    return $next($request);
}

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...