所以我尝试根据用户的角色将用户重定向到他们的仪表板。但是当我登录时,页面重定向回登录页面,而不是它应该访问的链接。当我删除身份验证中间件时,页面会重定向,但出现 403:用户未登录错误。这是我的代码:
AuthContoller.php:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
use App\Models\Login;
use App\Models\Signup;
use App\Models\User;
use App\Http\Controllers\Controller;
class AuthController extends Controller
{
public function login(Request $request)
{
$credentials = $request->only('email', 'password');
$role = $request->input('role');
$guard = $this->getGuardByRole($role);
if (!$guard) {
return redirect()->route('login')->with('error', 'Invalid role');
}
Auth::shouldUse($guard);
if (Auth::guard($guard)->attempt($credentials)) {
// Authentication successful
switch ($role) {
case 'super admin':
case 'admin':
case 'additional admin':
// $role = auth()->user()->role;
return redirect()->route('admin');
break;
case 'user':
// $role = auth()->user()->role;
return redirect()->route('user');
break;
}
}
// return view($viewName, ['userRole' => $userRole]);
return redirect()->route('login')->with('error', 'Invalid login credentials');
}
protected function getGuardByRole($role)
{
switch ($role) {
case 'user':
return 'web';
case 'super admin':
case 'additional admin':
return 'sadmin';
case 'admin':
return 'admin';
default:
// Handle default or unknown role
return null;
}
}
}
web.php:
Route::get('login', function () {
return view('commons.login');
});
Route::post('/login', [AuthController::class, 'login'])->name('login');
Route::middleware(['auth'])->group(function () {
Route::middleware(['role:super admin|admin|additional admin'])->group(function () {
Route::get('admin/home', function () {
return view('admin.home');
})->name('admin');
});
Route::middleware(['role:user'])->group(function () {
Route::get('user/home', function () {
return view('user.home');
})->name('user');
});
});
配置/auth.php:
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\Models\User::class,
],
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
'admins' => [
'driver' => 'eloquent',
'model' => App\Models\Signup::class,
],
'sadmins' => [
'driver' => 'eloquent',
'model' => App\Models\Login::class,
],
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'admin' => [
'driver' => 'session',
'provider' => 'admins', // Use a custom 'admins' provider for the 'admin' guard
],
'sadmin' => [
'driver' => 'session',
'provider' => 'sadmins', // Use a custom 'admins' provider for the 'admin' guard
],
],
内核.php:
protected $routeMiddleware = [
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
'role_or_permission' => \Spatie\Permission\Middlewares\RoleOrPermissionMiddleware::class,
];
protected $middlewareAliases = [
'auth' => \App\Http\Middleware\Authenticate::class,
请帮忙
如果页面正确加载,但在登录页面本身上,它不会加载管理/主页或用户/主页,我尝试在 Authcontroller 中使用视图而不是重定向()函数
错误更新:页面 admin/home 或 user/home 已加载到开发人员工具网络选项卡中,但状态为 302,有什么想法吗?
Route::group(['middleware' => ['auth','role']], function() { *routes here* })