Пользовательское промежуточное ПО - "Слишком много перенаправлений" - Laravel

Я хочу создать собственное промежуточное программное обеспечение, которое только в том случае, если пользователь прошел проверку подлинности, а электронная почта является определенной электронной почтой для доступа к странице /admin.

Хотя, когда я указываю свой собственный маршрут и затем перенаправление, он всегда говорит, что слишком много перенаправлений..

Краткое объяснение.

  1. Вход пользователя в систему -> перенаправление на /home. (Работает)
  2. Если пользователь пытается получить доступ к /admin и его электронная почта не соответствует адресу, указанному в промежуточном программном обеспечении, перенаправьте на / home.
  3. Если это правда, впустите их в /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

Другие вопросы по тегам