如何将管理员重定向到特定页面并将用户重定向到另一个页面 - Laravel 8 jetstream

How to redirect Admin to a specific page and users to another - Laravel 8 jetstream

我正在尝试将管理员重定向到管理面板页面,将用户重定向到主页

我为用户类型创建了新字段,并在数据库中添加了值“admin”

$table->string('usertype')->nullable();

然后我创建了这个中间件 (AdminMiddleware):

<?php

 namespace App\Http\Middleware;

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

 class AdminMiddleware
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @return mixed
 */
public function handle(Request $request, Closure $next)
{
    if(Auth::user()->usertype == 'admin')
    {
        return $next($request);
    }
    else
    {
        return redirect('/dashboard');
    }
    
   }
  }

然后我将它添加到内核:

        'admin' => \App\Http\Middleware\AdminMiddleware::class,

我将函数添加到 RouteServiceProvider 并导入了 class:

public const HOME = '/dashboard';
    protected function redirectTo()
    {
        if(Auth::user()->usertype == 'admin')
        {
            return 'panel';
        }
        else
        {
            return 'dashboard';
        }
    }

然后我将路线添加到 web.php:

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

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





Route::group(['middleware' => ['auth:sanctum','auth','admin','verified']],function() {
Route::get('/panel', function () {
    return view('admin.dashboard');
});

});

我创建了两个帐户,其中一个是管理员,用户类型的值为“admin” 但是当我登录时它仍然将我重定向到主页

我做错了什么?

有一个我一直在我的应用程序中使用的简单方法。

为此您不需要中间件。以 HomeController 或任何您想要的名称创建一个控制器。 在您 LoginController 中,将 属性 redirectTo 更改为简单路线。例如 '/home' 甚至 / 用于超级简单的路由。 现在在 routes/web.php 中添加此路由指向 HomeController 中的方法。

Route::get('/home', 'HomeController@redirectUser');

或者

Route::get('/', 'HomeController@redirectUser');

另外创建您自己要重定向到的路由。

Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
    Route::get('/panel', function () {
        return view('admin.dashboard');
    });
});

您还可以为多个用户创建路线。

现在在您的 HomeController 方法中,在 redirectUser() 方法中添加您的需求。

if (auth()->user()->usertype == 'admin') {
    return redirect(url('route url'));
} else {
    return redirect (url('some other url'));
}

请确保您在路由文件中定义了相同的 URI。

您也可以在 LoginController 中重定向用户。 但它仅在登录后有效。当用户单击主页按钮或包含主页 url.

的徽标时,此方法还将用户重定向到所需位置

希望本文对您有所帮助。

谢谢。

Sharan同志解释的很好,对于jetstream的工作人员来说,应该是这样的:

1- 我们创建控制器: 命名空间 App\Http\Controllers; 使用 Illuminate\Support\Facades\Auth;

class HomeController extends Controller
{
    public function redirectUser()
    {
        if (Auth::check()) {
            return view('admin.index');
        } else {
            return view('auth.login');
        }
    }

}

2- 在 web.php:

Route::get('/', 'App\Http\Controllers\HomeController@redirectUser')->name('homeController');
Route::group(['middleware' => ['auth:sanctum', 'verified']], function () {
    Route::get('/admin', function () {
        return view('admin.index');
    });
});

3- 在 RouteServiceProvider.php:

public const HOME = '/admin';

有了这个,我做的是每次有人进入主页面,如果他们没有登录,转到登录页面,如果他们登录,转到/管理页面,但如果打开我把完整的管理页面 url 重定向到管理员。