Laravel 5.7 向新创建的用户发送电子邮件验证
Laravel 5.7 Send an email verification on newly created user
基于此documentation您可以在有人自行注册时轻松创建用户电子邮件验证,但是当管理员为其用户创建帐户时如何发送电子邮件验证?
我已经尝试过这种方法
<?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();
时收到的电子邮件,它发送给 admin@admin.com 而不是 老师@teacher.com
编辑 2::
我已经找到了问题所在,因为我使用的是 VerifiesEmail
,这是我遇到的问题的核心。感谢@nakov 的帮助! :D
在您的 EventServiceProvider
class 中,您是否为已注册的事件注册了侦听器?
/**
* 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;
基于此documentation您可以在有人自行注册时轻松创建用户电子邮件验证,但是当管理员为其用户创建帐户时如何发送电子邮件验证?
我已经尝试过这种方法
<?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();
时收到的电子邮件,它发送给 admin@admin.com 而不是 老师@teacher.com
编辑 2::
我已经找到了问题所在,因为我使用的是 VerifiesEmail
,这是我遇到的问题的核心。感谢@nakov 的帮助! :D
在您的 EventServiceProvider
class 中,您是否为已注册的事件注册了侦听器?
/**
* 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;