Issue
I make admin route and user routes in laravel to register/login etc.. here are middlewares RedirectiIfnotAdmin
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfNotAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next,$guard = 'admin')
{
if (!Auth::guard($guard)->check()) {
return redirect('admin/login');
}
return $next($request);
}
}
RedirectIfAdmin
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next, $guard = 'admin')
{
if (Auth::guard($guard)->check()) {
return redirect('admin/home');
}
return $next($request);
}
}
RedirectedIfAuthenticated
<?php
namespace App\Http\Middleware;
use App\Providers\RouteServiceProvider;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class RedirectIfAuthenticated
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse) $next
* @param string|null ...$guards
* @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
*/
public function handle(Request $request, Closure $next, ...$guards)
{
$guards = empty($guards) ? [null] : $guards;
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
return $next($request);
}
}
here is kernel
*/
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
'admin.guest' => \App\Http\Middleware\RedirectIfAdmin::class,
'auth' => \App\Http\Middleware\Authenticate::class,
'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
'can' => \Illuminate\Auth\Middleware\Authorize::class,
'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
];
here is admin loginController
<?php
namespace App\Http\Controllers\AdminAuth;
use App\Models\GeneralSetting;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;
class LoginController extends Controller
{
/*
|--------------------------------------------------------------------------
| Login Controller
|--------------------------------------------------------------------------
|
| This controller handles authenticating users for the application and
| redirecting them to your home screen. The controller uses a trait
| to conveniently provide its functionality to your applications.
|
*/
use AuthenticatesUsers;
/**
* Where to redirect users after login / registration.
*
* @var string
*/
public $redirectTo = '/admin/home';
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('admin.guest', ['except' => 'logout']);
}
/**
* Show the application's login form.
*
* @return \Illuminate\Http\Response
*/
public function showLoginForm()
{
return view('admin.auth.login');
}
/**
* Get the guard to be used during authentication.
*
* @return \Illuminate\Contracts\Auth\StatefulGuard
*/
protected function guard()
{
return Auth::guard('admin');
}
public function username()
{
return 'name';
}
public function logout(Request $request)
{
$this->guard('admin')->logout();
$request->session()->invalidate();
return $this->loggedOut($request) ?: redirect('/admin/login');
}
}
the problem is whenever I try to login/register by user and redirect to login/register page.
it cannot reach and auto redirect to admin/login page
web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
Auth::routes();
// Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
Route::post('/get/ref/id', [App\Http\Controllers\FrontendController::class,'getRefId'])->name('get.ref.id');
Route::post('/get/position', [App\Http\Controllers\FrontendController::class,'getPosition'])->name('get.user.position');
Route::get('/admin', [App\Http\Controllers\AdminAuth\LoginController::class, 'showLoginForm']);
Route::group(['middleware' => 'web'], function() {
Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home');
});
Route::group(['prefix' => 'admin'], function () {
Route::get('/login', [App\Http\Controllers\AdminAuth\LoginController::class, 'showLoginForm'])->name('login');
Route::post('/login', [App\Http\Controllers\AdminAuth\LoginController::class, 'login']);
Route::post('/logout', [App\Http\Controllers\AdminAuth\LoginController::class, 'logout'])->name('admin.logout');
Route::middleware(['admin'])->group(function () {
Route::get('/register', [App\Http\Controllers\AdminAuth\RegisterController::class, 'showRegistrationForm'])->name('register');
Route::post('/register', [App\Http\Controllers\AdminAuth\RegisterController::class, 'register']);
});
});
admin.php in routes
<?php
Route::get('/home', function () {
$users[] = Auth::user();
$users[] = Auth::guard()->user();
$users[] = Auth::guard('admin')->user();
//dd($users);
return view('admin.home');
})->name('home');
service provider
public function boot()
{
$this->configureRateLimiting();
$this->routes(function () {
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
Route::prefix('admin')
->middleware(['web', 'admin', 'auth:admin'])
->as('admin.')
->namespace($this->namespace)
->group(base_path('routes/admin.php'));
});
}
how can solve this ,what wrong in middleware. plz help me
Solution
You have 2 routes named login
in your web.php
file. One provided by Auth::routes()
and the other you have defined yourself for the admin login. When trying to resolve a route by that name it is picking up the second one (the admin one). The links you have for Login and Register in your template are using route names so the login link will be pointing to the admin login since that is the route named login
.
Rename your admin login route to something other than just login
.
Answered By - lagbox
0 Comments:
Post a Comment
Note: Only a member of this blog may post a comment.