簡體   English   中英

Laravel 中間件不會重定向到登錄用戶的特定路由

[英]Laravel Middleware not redirecting to specific route for logged in users

我正在使用 Laravel 7 並為管理員和學生提供我的中間件。 登錄時,它將它們重定向到主頁,這會引發 404 not found 錯誤。 我希望管理員訪問 admin.dashboard,學生訪問 users.dashboard。 在任何一種情況下登錄后,我都可以訪問它們各自的頁面。 顯然,我錯過了一些東西。 如果有人能幫我找出我哪里出錯了,我一定會很感激的。 先感謝您。

網頁.php

<?php

use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('welcome');
});


Auth::routes();

Route::group(['middleware' => ['auth', 'isAdmin']], function () {
    Route::get('/admin', function () {
        return view('admin.dashboard');
    });
    Route::get('registered-user', 'Admin\RegisteredController@index');

    Route::get('/quizzes', 'Admin\QuizzesController@index');

    Route::post('save-quiz', 'Admin\QuizzesController@store');
});

Route::group(['middleware' => ['auth', 'isStudent']], function () {
    Route::get('/student', function () {
        return view('users.dashboard');
    });
});

學生中間件.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class StudentMiddleware
{

    public function handle($request, Closure $next)
    {
        if (Auth::user()->role_as == 'student') {
            return $next($request);
        } else {
            return redirect('login');
        }
    }
}

管理中間件.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class AdminMiddleware
{
    public function handle($request, Closure $next)
    {
        if (Auth::user()->role_as == 'admin') {
            return $next($request);
        } else {
            return redirect('/home')->with('status', 'You are not allowed to access the Admin Dashboard');
        }
    }
}

我的 Kernel.php 中的兩行

'isAdmin' =>  \App\Http\Middleware\AdminMiddleware::class,
'isStudent' =>  \App\Http\Middleware\StudentMiddleware::class,

我從未更改過 RedirectIfAuthenticated.php 中的任何內容。 它與安裝時一樣。

如果我遺漏了任何內容,請告訴我,以便我可以編輯我的查詢。 再次提前致謝。

或者,您可以使用身份驗證門來實現此目的。 在您的 AuthServiceProvider 中:

 Gate::define('is-student', function ($user) {
        return $user->role_as == 'student';
    });

在你的路線或控制器中

if(Gate::allows('is-student')
    return view('users.dashboard')

等等其他角色..

在回答我自己的問題時,我在 LoginController.php 中缺少以下內容替換protected $redirectTo = RouteServiceProvider::HOME;

public function redirectTo()
    {
        // Admin Login
        if (Auth::user()->role_as == 'admin') {
            return 'admin';
        }

        if (Auth::user()->role_as == 'student') {
            return 'student';
        }
    }

如果其他人遇到同樣的問題,我希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM