Задать вопрос
@Obolduy

Как исправить ошибки посредника?

Здравствуйте, столкнулся со следующей проблемой: пишу авторизацию на Ларавел, все, что хотел, сделал, теперь хочу написать посредник, который бы проверял, авторизирован ли пользователь (Сайт подразумевает обязательную регистрацию). Всё делаю по официальному гайду, но получаю ошибку:
Call to a member function send() on string
Я пробовал и предустановленный посредник, и самопальный. Вот код оригинала:
<?php

namespace App\Http\Middleware;

use Illuminate\Auth\Middleware\Authenticate as Middleware;

class Authenticate extends Middleware
{
    /**
     * Get the path the user should be redirected to when they are not authenticated.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return string|null
     */
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            return route('login');
        }
    }
}

Своего:
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthCheckMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if (!Auth::user()) {

            return route('login');

        }

        return $next($request);
    }
}

Роут:
Route::match(['get', 'post'], '/login', [LoginController::class, 'login'])->name('login');

Что делать, ума не приложу. При этом, изначально в посреднике Auth была вечная рекурсия. Буду очень признателен за помощь!
upd: Всё, вопрос снят, я разобрался-таки. Дело было в том, что я сделал посредник, кидающий на роут "логин", общим для всех роутов, в т.ч и для самого Логина, то-бишь получалась вечная рекурсия. Всё решилось группировкой роутов и присандаливания к ним посредника:
Route::middleware(['auth'])->group(function () { 
// Тут все роуты, кроме тех, которые отвечают за аутентификацию 
});

Вдруг кому-то поможет, потому что ответ было не найти
  • Вопрос задан
  • 58 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@Obolduy Автор вопроса
public function handle(Request $request, Closure $next)
    {
        $value = session('auth');

        if (empty($value)) {

            return redirect()->route('login');

        }

        return $next($request);
    }


Решил чуть переиграть. Теперь всё срабатывает, если верить консоли. Только вот редирект зацикливается и браузер выбивает ошибку: "Firefox определил, что сервер перенаправляет запрос на этот адрес таким образом, что он никогда не завершится".
Да, при регистрации\логине в сессию именно в поле 'auth' должна вписываться единичка.
Да, return redirect('login'); и return route('login'); я тоже пробовал. Без толку. В интернете тоже ничего нет(
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы