Привет, делаю проект на ларе и столкнулся с такой задачей.
Мне необходимо, что бы авторизоваться на сайте мог только тот юзер, у которого в статусе стоит "active".
Я сделал так.. Как только юзер зарегистрировался на сайте, в базе создаётся запись с его веденными данными, где в статусе по умолчанию стоит "no active". При этом юзера на сайт после реги не пускает, а выводится флешка, типа вам на почту выслано сообщение с активацией и редиректит на главную.
Авторизацию на сайте тоже закрыл проверкой, переопределив метод authenticated(), внутри простая проверка, что если статус не "active" то уходи прочь и опять флешка, иди на почту.
Проблема вот в чем, когда на почту приходит письмо Verify Email Adress, юзер кликает на него и попадает вновь на страницу авторизации, тк срабатывает посредник 'auth' и юзеру вновь предлагают пройти на почту и так до бесконечности.
А статус "Active" может быть присвоен только после того, как юзер пройдет по ссылке из письма и авторизуется.
Смотрите, user без статуса 'Active' не может авторизовываться, но маршрут, по которому юзер переходит по ссылке из письма, защищен посредником auth, соответственно срабатывает авторизация вновь. По сути, для подтверждения почты, авторизация не нужна, и я бы с радостью отказался от посредника auth, но в доках она есть, и если убрать то все ломается
VladimirKrasnov, там все просто решается. У вас проект на чистом ларавеле как я понял, без всяких breeze, jetstream как я понял. Через минут 30 решим. Добреду до компа
п.с. а вообще я бы рекомендовал к 8ке breeze установить для всех этих манипуляций. 2 минуты и все из коробки работает. посмотрите
VladimirKrasnov, собственно вот какие мысли. Если Вы аппелируете к докам - "в доках она есть", то почему не сделать все как в доках описано и не использовать кастомные active/ no active. В доках как раз и стоит auth, потому что по умолчанию в laravel контроллере, который отвечает за регистрацию, осуществляется сразу и Login пользователя. Поэтому и auth посредник. Если Вы не хотите логинить пользователя, то и auth посредник для этого роута Вам не нужен - все просто по идее.
Что бы я предложил...
1) использовать все же встроенные методы и делать проверку через (как Вы называете) посредник verified. Сейчас быстренько воспроизвел с чистой лары. и получается такая конструкция. Без лишних полей - active, no active. А только по встроенному email_verified_at.
1.a. Регистрация пользователя. Сразу его логините, чтобы срабатывал посредник auth. Но роуты закрываете посредником middleware('verified'); Тогда будет переадресация на страницу с уведомлением, пока не подтвердит почту и в БД не поменяется значение.
2) если Вы все же кастомными функциями решили пользоваться, то может и еще проще. Убрать на роут, где происходит проверка "клика по ссылке" - middleware auth. и в этом методе контроллера - сразу логинить пользователя, чтобы он не вводил в очередной раз данные. Собственно Вы сейчас к этому и пришли, но осторожничаете убрать auth посредника.
Кликнул по ссылке - залогинился - редирект на основную страницу сайта/личный кабинет.
VladimirKrasnov, покажите, пожалуйста, на что Вы ссылаетесь в документации. И какая ошибка.
Вот смотрите - у вас сейчас стоит auth. Так? но саму авторизацию в какой момент Вы делаете?
уверен, что все очень рядом, но есть микро-нюанс