[英]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.