Laravel 5.7 - Как я могу динамически запускать электронное письмо с подтверждением пользователя?

Когда я регистрируюсь на странице регистрации, ссылка в полученном электронном письме работает нормально.

Когда я вместо этого использую $user->sendEmailVerificationNotification() как я видел в vendor\laravel\framework\src\Illuminate\Auth\Listeners\SendEmailVerificationNotification.php, он не работает.

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

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

Любая помощь будет оценена по достоинству.

Спасибо за включение версии Laravel - это важная информация, которую я использовал для построения своего ответа.

1000Nettles 12.02.2019 00:54

Разве вы не должны войти в систему, чтобы ваш адрес не был проверен случайным человеком?

mhlsf 28.03.2019 11:57

Ссылка использует подписанный URL. Это не может быть проверено случайным человеком.

jabdefiant 29.03.2019 23:46
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
9
3
1 172
1

Ответы 1

Этот ответ предполагает, что вы уже настроили Аутентификация и Подтверждение по элетронной почте Laravel.

Когда пользователь регистрируется в приложении, контроллер по умолчанию использует трейт Illuminate\Foundation\Auth\RegistersUser. Обратите внимание на дополнительную функциональность, которая имеет место в методе register(), а также обратите внимание, что генерируется \Illuminate\Auth\Events\Registeredсобытие, который, в свою очередь, запускает слушательSendEmailVerificationNotification (откуда вы в настоящее время получаете свой код).

Для вашего пользовательского класса вы потенциально можете повторно использовать трейт Illuminate\Foundation\Auth\RegistersUser, но это может показаться странным, поскольку ваш класс, вероятно, не является контроллером, а трейт включает дополнительную логику, специфичную для контроллера.

Вместо этого вы можете попробовать скопировать код из Illuminate\Foundation\Auth\RegistersUser::register() и использовать его в своем новом классе.

Итак, что-то похожее на:

// If you do not yet have a new user object.
$user = \App\User::create([
    'name' => $data['name'],
    'email' => $data['email'],
    'password' => \Illuminate\Support\Facades\Hash::make($data['password']),
]);

// Fire the event now with the user you want to receive an email.
event(new \Illuminate\Auth\Events\Registered($user));

Дополнительная информация:

Спасибо за ответ. Я попробовал, как вы предложили, и я получил электронное письмо. Однако ссылка signURL не проверяла пользователя, а просто перенаправляла его на страницу входа.

jabdefiant 13.02.2019 13:02

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

jabdefiant 13.02.2019 13:15

@jabdefiant, не могли бы вы поделиться своим нестандартным решением? Я столкнулся с той же проблемой, что он перенаправляет пользователя на страницу входа.

slawkens 30.03.2019 22:46

Мне пришлось создать свой собственный почтовый ящик, а затем запустить его в новом контроллере, когда администратор регистрирует пользователя, например. Mail::to($user->email)->send(new myVerifyMail($user, 'Verify Email Address')); Почтовый объект создает подписанный URL-адрес, и представление должно включать эту ссылку, чтобы пользователь мог щелкнуть ее. Это может быть не лучший способ справиться с этим, но я уже потратил слишком много времени на эту проблему.

jabdefiant 01.04.2019 17:29

Другие вопросы по теме