- Add the token to the mailbox database is active User table and field
Method one: Normal methods
database / migrations / 2014_10_12_000000_create_users_table.php additional field
$table->string('email_token')->unique();
$table->tinyInteger('email_alive')->default(0);
database / factories / UserFactory.php additional data
'email_token' => Str::random(10),
'email_alive' => false,
Rebuild Data Sheet
artisan migrate:fresh --seed
Method Two: Model event
Laravel of Events (events) and Observers (observer)
Laravel model event execution order
database / migrations / 2014_10_12_000000_create_users_table.php additional field
$table->string('email_token')->unique();
$table->tinyInteger('email_alive')->default(0);
Files generated observer
artisan make:observer UserObserver
In the event a file is written model
class UserObserver
{
public function creating(User $user) {
$user->email_token = Str::random(10); // 生成十位验证码
$user->email_alive = false;
}
}
Register app / Providers / AppServiceProvider.php in
public function boot()
{
User::observe(UserObserver::class);
}
Rebuild Data Sheet
artisan migrate:fresh --seed
- Adding authentication method in the control and add routes
public function confirmEmailToken($token) {
...
}
Route::get('confirmEmailToken/{token}', 'UserController@confirmEmailToken')->name('confirmEmailToken');
- The method of adding a mailbox store controller transmits the verification code feature
// 创建注册数据
$user = User::create($data);
// 发送验证邮件
\Mail::to($user)->send(new RegMail($user));
session()->flash('success', '注册成功请完成验证');
- Modify RegMail method
class RegMail extends Mailable
{
use Queueable, SerializesModels;
// 设置一个公共变量
public $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($user)
{
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
// 不需要传值,会自动向view返回公共变量
return $this->view('mail.reg');
}
}
- Edit message content
resources/views/mail/reg.blade.php
<a href="{{route('confirmEmailToken', $user->email_token)}}">点击完成注册</a>
{{$user->email_token}}
- Edit authentication method
public function confirmEmailToken($token) {
$user = User::where('email_token', $token)->first();
if ($user) {
$user->email_active = true;
$user->save();
session()->flash('success', '注册成功');
return redirect('/');
}
}