Проверять каждый запрос пользователя после того, как пользователь вошел в систему с условиями в Laravel 6.18 - PullRequest
0 голосов
/ 02 апреля 2020

Хорошо, позвольте мне объяснить мое требование в ближайшее время. У меня есть портал, где поставщики могут зарегистрироваться и добавить свой контент на наш сайт. Обычно регистрация состоит из 5 этапов, когда после того, как поставщик завершил первый этап регистрации, пользователь войдет в систему, а также обновит столбец registration_step в таблице БД. После того, как поставщик завершил свой первый шаг, он может выйти из системы, а затем, как только он снова войдет в систему, пользователь не сможет go другой URL-адрес, пока он не завершит все этапы регистрации. Итак, я попытался выполнить это sh с помощью промежуточного программного обеспечения, как показано ниже. Обратите внимание, что в этой системе есть 3 разных типа пользователей.

 class CheckUserRegistrationStep
{
    public function handle($request, Closure $next)
    {
        $supplier = Auth::guard('supplier');
        if ($supplier->check()) {
            $supplierRegistrationStep = Supplier::findOrFail($supplier->user()->id)->registration_step;
            if ($supplierRegistrationStep == 2) {
                return redirect()->route('suppliers.registration-step02-otp-verification');
            } else if ($supplierRegistrationStep == 3) {
                return redirect()->route('suppliers.registration-step03-nature-of-business');
            } else if ($supplierRegistrationStep == 4) {
                return redirect()->route('suppliers.registration-step04-categories-and-locations');
            } else if ($supplierRegistrationStep == 5) {
                return $next($request);
            }
        } else {
            return back();
        }
    }
}

Но проблема в том, что, когда я использую это промежуточное ПО в контроллере, он выдает ошибку слишком много перенаправлений . Я знаю, что эта ошибка происходит, потому что пользователь снова и снова перенаправляется на один и тот же URL. Поэтому я пытался с таким количеством методов выполнить sh мое требование, но все еще не повезло.

Просто я пытаюсь остановить переход пользователя на другие URL-адреса, пока он не завершит регистрацию, и я не хочу перенаправить пользователя на место, где он останавливает этап регистрации.

Обновление

Ошибка, возникающая после изменения кода @CleanCode's answer

ErrorException

Попытка получить свойство 'headers' не-объекта

Это контроллер

 public function __construct()
{
    $this->middleware('auth:supplier', ['except' => ['step01', 'step01Store']]);
 }

1 Ответ

1 голос
/ 02 апреля 2020

Вас перенаправляют, потому что он проверяет состояние и перенаправляет на тот же маршрут, но вы не проверяете, является ли текущий маршрут не перенаправляющим. Вы можете добавить еще одну проверку к условию, чтобы проверить, не является ли маршрут перенаправляющим.

class CheckUserRegistrationStep
{
    public function handle($request, Closure $next)
    {
        $supplier = Auth::guard('supplier');
        if ($supplier->check()) {
            $supplierRegistrationStep = Supplier::findOrFail($supplier->user()->id)->registration_step;
            if ($supplierRegistrationStep == 2 && !$request->route()->named('suppliers.registration-step02-otp-verification')) {
                return redirect()->route('suppliers.registration-step02-otp-verification');
            } else if ($supplierRegistrationStep == 3 && !$request->route()->named('suppliers.registration-step03-nature-of-business')) {
                return redirect()->route('suppliers.registration-step03-nature-of-business');
            } else if ($supplierRegistrationStep == 4 && !$request->route()->named('suppliers.registration-step04-categories-and-locations')) {
                return redirect()->route('suppliers.registration-step04-categories-and-locations');
            } else if ($supplierRegistrationStep == 5) {
                return $next($request);
            }
        } else {
            return back();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...