Пользовательское промежуточное ПО - "Слишком много перенаправлений" - Laravel
Я хочу создать собственное промежуточное программное обеспечение, которое только в том случае, если пользователь прошел проверку подлинности, а электронная почта является определенной электронной почтой для доступа к странице /admin.
Хотя, когда я указываю свой собственный маршрут и затем перенаправление, он всегда говорит, что слишком много перенаправлений..
Краткое объяснение.
- Вход пользователя в систему -> перенаправление на /home. (Работает)
- Если пользователь пытается получить доступ к /admin и его электронная почта не соответствует адресу, указанному в промежуточном программном обеспечении, перенаправьте на / home.
- Если это правда, впустите их в /admin
Мое промежуточное ПО называется admin.verify
Файл маршрутов:
Route::get('/admin', 'AdminController@index')->name('admin.index');
AdminController:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class AdminController extends Controller
{
public function __construct(){
$this->middleware(['auth', 'admin.verify']);
}
public function index(){
return view('admin.test');
}
}
Middleware:
public function handle($request, Closure $next)
{
if (Auth::check() && Auth::User()->email == 'Tester@gmail.com') {
return $next($request);
} else {
return redirect()->route('home');
}
Мой домашний маршрут:
GET|HEAD | home | home| App\Http\Controllers\HomeController@index | web,auth
Домашний контроллер:
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('home');
}
}
1 ответ
Использование $this->middleware ('admin.verify')
вместо $this->middleware(['auth, admin.verify]');
, Вы получаете слишком много ошибок перенаправлений, потому что и промежуточное ПО администратора, и конструктор проверяют, прошел ли пользователь аутентификацию.
Проблема в том, что когда вы обращаетесь к домашнему маршруту, вызывается метод auth.verify, и когда он терпит неудачу, он перенаправляется на сам дом, создавая цикл, следовательно, слишком много ошибок перенаправления.
Измените условие else в промежуточном программном обеспечении auth.verify для перенаправления на другую страницу, например /login