I created a new column in roles table, so user can assign a default page for the role. When a user logins successfully if his/her role has a default page, I want him/her to be redirected to that default page, if his/her role doesn’t have a default page (empty) then he/she will be redirected to the default home page. I tried to achieve this using a middleware however it didn’t work. What am I doing wrong?
Laravel: 10.48.4
PHP: 8.1.25
RedirectBasedOnRole.php
`
namespace AppHttpMiddleware;
use Closure;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;
class RedirectBasedOnRole
{
public function handle(Request $request, Closure $next, ...$guards)
{
if (Auth::check()) {
$user = Auth::user();
if ($user->roles->isNotEmpty()) {
$defaultRoute = $user->roles->first()->default_route;
if ($defaultRoute) {
return redirect()->route($defaultRoute);
}
}
}
return $next($request);
}
}
`
My web.php is below:
`
Route::middleware(['auth', 'verified', 'role.redirect'])->group(function () {
Route::get('/', [DashboardController::class, 'index']);
Route::prefix('dashboard')->group(function () {
Route::get('/', [DashboardController::class, 'index'])->name('dashboard');
Route::get('/trades', [DashboardController::class, 'trades'])->name('dashboard.trades');
Route::get('/orders', [DashboardController::class, 'orders'])->name('dashboard.orders');
Route::get('/fetch.dashboard.widget.1', [DashboardController::class, 'fetchDashboardWidget1'])->name('dashboard.widget1');
Route::get('/fetch.dashboard.widget.2', [DashboardController::class, 'fetchDashboardWidget2'])->name('dashboard.widget2');
Route::get('/fetch.dashboard.widget.3', [DashboardController::class, 'fetchDashboardWidget3'])->name('dashboard.widget3');
Route::get('/fetch.dashboard.widget.4', [DashboardController::class, 'fetchDashboardWidget4'])->name('dashboard.widget4');
});
Route::prefix('strategies')->group(function () {
Route::get('/', [StrategiesController::class, 'index'])->name('strategies.index');
Route::get('/create', [StrategiesController::class, 'create'])->name('strategies.create');
Route::post('/', [StrategiesController::class, 'store'])->name('strategies.store');
Route::get('/strategy-files', [StrategiesController::class, 'strategyfiles'])->name('strategyfiles');
Route::get('/{id}/trades', [TradesController::class, 'strategy'])->name('strategy.trades');
Route::get('/{id}/orders', [OrdersController::class, 'strategy'])->name('strategy.orders');
Route::get('/{id}/edit', [StrategiesController::class, 'edit'])->name('strategies.edit');
Route::put('/{id}', [StrategiesController::class, 'update'])->name('strategies.update');
Route::delete('/{id}', [StrategiesController::class, 'destroy'])->name('strategies.destroy');
Route::post('/strategy-files/save', [StrategiesController::class, 'strategyfilesave'])->name('strategyfile.save');
Route::post('/strategy-files/saveas', [StrategiesController::class, 'strategyfilesaveas'])->name('strategyfile.saveas');
Route::post('/strategy-files/addnew', [StrategiesController::class, 'strategyfileaddnew'])->name('strategyfile.addnew');
Route::delete('/strategy-files/{strategyfile}', [StrategiesController::class, 'strategyfiledelete'])->name('strategyfile.delete');
});
});
`
When a user with the role default page strategies logins successfully, I get the below redirection and error,
This is the developer console screenshot:
enter image description here
Tufan Aydın is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.