Laravel 5.7 Отправить подтверждение по электронной почте вновь созданному пользователю

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

Я уже пробовал с этим подходом

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Hash;
use Illuminate\Foundation\Auth\VerifiesEmails;

class TeacherController extends Controller
{
    use VerifiesEmails;

    ... // Other basic functions

    public function store(Request $request)
    {
        $rules = [
            'first_name' => ['string', 'required', 'max:255'],
            'last_name' => ['string', 'nullable', 'max:255'],
            'email' => ['string', 'required', 'email', 'max:255', 'unique:users'],
            'password' => ['string', 'required', 'min:6', 'confirmed'],
        ];

        $request->validate($rules);

        $teacher = \App\User::create([
            'first_name' => $request->input('first_name'),
            'last_name' => $request->input('last_name'),
            'email' => $request->input('email'),
            'password' => Hash::make($request->input('password')),
            'role' => 'teacher',
        ]);

        $teacher->sendEmailVerificationNotification();

        return redirect()->route('teachers');
    }

    ... // Other basic functions

}

но он не работает и вообще никаких ошибок, но если я использую $request->user()->sendEmailVerificationNotification();, он работает, но вместо этого отправьте подтверждение по электронной почте для администратора. Я уже погуглил, но не нашел нужного ответа.

Итак, как решить эту проблему? Могу ли я добиться этого с помощью функций по умолчанию из laravel или я должен создать сам?

РЕДАКТИРОВАТЬ :: Вот письмо, которое приходит, когда я использую $request->user()->sendEmailVerificationNotification();, оно отправляется на [email protected] вместо учитель@teacher.com

введите здесь описание изображения

РЕДАКТИРОВАТЬ 2 :: Я уже нашел проблему, потому что я использую VerifiesEmail, который является ядром моих проблем. Спасибо @nakov за помощь! : D


person Khrisna Gunanasurya    schedule 10.12.2018    source источник
comment
дайте мне знать, что вы используете локальный сервер и другие   -  person Krishna kushwaha    schedule 10.12.2018
comment
@Krishnakushwaha да, я использую локальный сервер, а также использую телескоп   -  person Khrisna Gunanasurya    schedule 10.12.2018


Ответы (1)


В вашем классе EventServiceProvider зарегистрировали ли вы слушателя для зарегистрированного события?

/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    Registered::class => [
        SendEmailVerificationNotification::class,
    ],
];

и не забудьте импортировать сверху:

use Illuminate\Auth\Events\Registered;
use Illuminate\Auth\Listeners\SendEmailVerificationNotification;
person nakov    schedule 10.12.2018
comment
да, я уже сделал это, но я заметил, что SendEmailVerificationNotification() обрабатывает зарегистрированного пользователя, но только что созданный пользователь уже считается зарегистрированным. Вот содержимое SendEmailVerificationNotification.php public function handle(Registered $event) { if ($event->user instanceof MustVerifyEmail && ! $event->user->hasVerifiedEmail()) { $event->user->sendEmailVerificationNotification(); } } - person Khrisna Gunanasurya; 10.12.2018
comment
хорошо для уже зарегистрированных пользователей, после входа в систему, если вы окружили маршруты проверенным промежуточным программным обеспечением, он покажет им страницу для отправки электронного письма со ссылкой. Так что тот, который я упомянул, должен работать для новых пользователей. - person nakov; 10.12.2018
comment
да, это правда, когда они пытались войти в систему, сначала нужно было повторно отправить подтверждение электронной почты, но я не думаю, что это красота. Поэтому я хочу, чтобы, как только администратор создаст учетную запись, на вновь созданный адрес электронной почты будет отправлено подтверждение по электронной почте. - person Khrisna Gunanasurya; 10.12.2018
comment
поэтому вам следует зарегистрировать слушателя. Но если админ регистрирует учителя, как они узнают пароль? Даже если они получат электронное письмо для подтверждения своей учетной записи, им необходимо будет войти в свою учетную запись? Вы по какой-то причине переопределяете конфигурацию to в mail.php для отправки писем на [email protected]? - person nakov; 10.12.2018
comment
им будет предоставлен пароль, который прикреплен к электронному письму, но сейчас я хочу, чтобы приложение отправляло подтверждение по электронной почте для каждого созданного пользователя (не после регистрации). нет, я не заменяю электронное письмо на [email protected]. оно отправлено [email protected], потому что на данный момент зарегистрированный пользователь. Что-то мне не хватает, если я хочу использовать проверку электронной почты laravel по умолчанию? потому что в их документации не говорилось, как использовать его для другого контроллера и т. д. - person Khrisna Gunanasurya; 10.12.2018
comment
Я использую проверку не так, как вы, потому что я отправляю письма пользователям, которые регистрируются, но в любом случае вы используете $teacher->sendEmailVerificationNotification();, который должен отправлять электронное письмо этому пользователю, если вы реализуете MustVerifyEmail интерфейс в своем классе пользователей. - person nakov; 10.12.2018
comment
да, я уже реализовал MustVerifyEmail, и это нормально, если кто-то зарегистрируется. но в моем случае пользователь должен быть зарегистрирован администраторами. так что я как бы застрял с этим подтверждением электронной почты. - person Khrisna Gunanasurya; 10.12.2018
comment
Давайте продолжим это обсуждение в чате. - person nakov; 10.12.2018