I had a problem with my Laravel Authentication. I cannot redirect to the page that supposed to go when I'm logging in. Hence, it would redirect back again to my login page when I'm using middleware. I am using middleware because it is a multiple authentication type.
Web.php Routes
Auth::routes();
Route::group(['middleware' => 'auth'], function() {
Route::get('/', 'HomeController@index')->name('home');
Route::get('/inbox', 'HomeController@nonadmin')->middleware('admin')->name('inbox');
//Route::get('/department', 'DepartmentController@index');
Route::resource('department', 'DepartmentController');
Route::resource('admin', 'AdminController');
Route::resource('faculty', 'FacultyController');
Route::resource('student', 'StudentController');
//Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
Auth::logout();
});
Admin.php middleware
namespace App\Http\Middleware;
use Closure;
use Auth;
class Admin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (!Auth::check()) {
return redirect()->route('login');
}
if(Auth::user()->user_type == 'Admin' && Auth::user()->status == 'Active')
{
return redirect()->route('dashboard');
}
if(Auth::user()->user_type == 'Staff' && Auth::user()->status == 'Active')
{
return redirect()->route('dashboard');
}
if(Auth::user()->user_type == 'Faculty' && Auth::user()->status == 'Active')
{
return redirect()->route('inbox');
}
if(Auth::user()->user_type == 'Student' && Auth::user()->status == 'Active')
{
return redirect()->route('inbox');
}
if(Auth::user()->user_type == 'Parent' && Auth::user()->status == 'Active')
{
return redirect()->route('inbox');
}
}
}
LoginController
use AuthenticatesUsers;
/**
* Where to redirect users after login.
*
* @var string
*/
protected $redirectTo = '/';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('guest')->except('logout');
}
public function logout(Request $request) {
Auth::logout();
return redirect('/');
}
public function username()
{
return 'username';
}
I also declare the middleware in Kernel.php I use this on my previous projects. But on this current one where I use Laravel 7 the current version, it all redirects on a login page.
Update:
I updated the routes as suggestion by Qirel.
Auth::routes();
Route::group(['middleware' => 'auth'], function() {
Route::get('/', 'HomeController@index')->middleware('admin')->name('home');
Route::get('/inbox', 'HomeController@nonadmin')->name('inbox');
//Route::get('/department', 'DepartmentController@index');
Route::resource('department', 'DepartmentController');
Route::resource('admin', 'AdminController');
Route::resource('faculty', 'FacultyController');
Route::resource('student', 'StudentController');
});
And I also put the return $next($request); on the middleware on the last part still not working. I wondering that in my current project, it is not working but on the past it is working.