如何将管理员重定向到特定页面并将用户重定向到另一个页面 - 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 重定向到管理员。
我正在尝试将管理员重定向到管理面板页面,将用户重定向到主页
我为用户类型创建了新字段,并在数据库中添加了值“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 重定向到管理员。