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



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

我为usertype创建了新的字段,并在数据库中添加值";管理员";

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

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

<?php
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
class AdminMiddleware
{
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest  $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' => AppHttpMiddlewareAdminMiddleware::class,

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

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

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

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');
});
});

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

我在这里做错了什么?

我在应用程序中使用了一种简单的方法。

您不需要用于此目的的中间件。以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');
});
});

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

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

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

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

您还可以重定向LoginController中的用户。但它只有在登录后才能工作。当用户单击主页按钮或包含主页url的徽标时,这种方法也会将用户重定向到所需的位置。

希望这个能帮助你。

谢谢。

正如Sharan同志所解释的,对于那些使用喷气流的人来说,它将如下所示:

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('/', 'AppHttpControllers\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';

有了这个,我所做的是,每次有人进入主页时,如果他们没有登录,转到登录页面,如果他们登录了,转到/admin页面,但如果在admin页面上我放了完整的url,它会重定向到admin。

最新更新