我正在尝试将管理员重定向到管理面板页面,并将用户重定向到主页
我为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');
});
});
您还可以为多个用户创建路由。
现在,在您的HomeController
和redirectUser()
方法中,添加您的需求。
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。