Получение цикла перенаправления при использовании Middleware - PullRequest
1 голос
/ 11 июня 2019

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

Итак, в моем routes/web.php у меня есть что-то вроде этого:

Route::group(['middleware' => ['auth', 'user.required.fields']], function () {

}

Как вы можете видеть, я добавил дополнительное Middleware: user.required.fields это выглядит так

<?php

namespace App\Http\Middleware;

use Closure;

class CheckUserRequiredFields
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if(auth()->user()->has_filled_required_fields){
            return $next($request);
        }
        else{
            return redirect()->route('new-user');
        }
    }
}

Атрибут, о котором идет речь, выглядит следующим образом:

/**
 * If the user has filled in their role, department and location, allow full access to the intranet
 *
 * @return void
 */
public function getHasFilledRequiredFieldsAttribute()
{
    if ($this->role && $this->department && $this->location) {
        return true;
    } else {
        return false;
    }
}

Однако это вызывает бесконечный цикл.

Есть ли в промежуточном программном обеспечении auth что-то, что могло бы вызвать это? Это похоже на то, что промежуточное программное обеспечение вызывает себя снова и снова.

Код будет правильно перенаправлен на route('new-user) `, но затем повторно попадет на маршрут.

1 Ответ

0 голосов
/ 11 июня 2019

Я думаю, вы определили route('new-user') в этой группе:

Route::group(['middleware' => ['auth', 'user.required.fields']], function () {
    //
}

Итак, это будет проверено промежуточным программным обеспечением, которое снова и снова возвращает один и тот же маршрут, что вызывает упомянутый цикл.

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

...