Как удержать два промежуточных ПО Laravel от создания бесконечных перенаправлений? - PullRequest
0 голосов
/ 27 сентября 2018

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

Мой kernel.php:

    protected $middleware = [
    'Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode',
    'Illuminate\Cookie\Middleware\EncryptCookies',
    'Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse',
    'Illuminate\Session\Middleware\StartSession',
    'Illuminate\View\Middleware\ShareErrorsFromSession',
    'App\Http\Middleware\VerifyCsrfToken',
    'App\Http\Middleware\AuthenticateSigned',
    'App\Http\Middleware\FeesOwed',
    'App\Http\Middleware\DeniedAccess'
];

Те, кто создает эту проблему, - AuthenticateSigned и FeesOwed

Первый AuthenticateSigned:

public function handle($request, Closure $next)
{
    if ($this->auth->guest())
    {
        if ($request->ajax()){
            return response('Unauthorized.', 401);
        } else {
            return redirect()->guest('login');
        }

    } else if(!$this->auth->user()->role->administrator){ // the users not an admin

        if(!$this->auth->user()->agreement_id || $this->auth->user()->signed_current_membership_agmt == 0 ){
            if ($request->ajax()){
                return response('Unauthorized.', 401);
            } else {
                return redirect()->route('agreement');
            }
        }

        return $next($request);

    } 

    return $next($request);

}

тогда мой FeesOwed:

public function handle($request, Closure $next)
{

    $uri = $request->server()['REQUEST_URI'];

    if($this->auth->user() 
        && $this->auth->user()->role_id != 3
        && $this->auth->user()->unpaidFees() // Does the user have past due fees
        && $uri != '/profile/investment-fees' // view of form to pay fees
        && $uri != '/profile/charge-investment-fees' // post request to pay fees
        && $uri != '/profile/pay-payment'

        && $uri != '/logout'
        //&& !$this->auth->user()->role->administrator // admins shouldn't be subject to this
        ){
        \Session::flash('message','You must pay past due management fees before using the rest of the members platform.');

        return redirect()->route('profile.investment-fees');
    } 

    return $next($request);
}

Я прочитал тонну SO сообщений и laracasts, и все заметки либо "your missing a return $next($request);", либо они являются промежуточным программным обеспечением маршрута.

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

Любая помощь очень ценится.Спасибо

1 Ответ

0 голосов
/ 27 сентября 2018

Когда гостевой пользователь пытается получить доступ к /login, промежуточное ПО AuthenticateSigned перенаправит его на /login, вызывая бесконечный цикл перенаправления.

Избегайте перенаправления, когда запрошенный URL совпадает содин, на который вы пытаетесь перенаправить.

...