Laravel study notes (14) to complete the registration code by mail

  1. 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 
  1. Adding authentication method in the control and add routes
    public function confirmEmailToken($token) {
    	...
    }
Route::get('confirmEmailToken/{token}', 'UserController@confirmEmailToken')->name('confirmEmailToken');
  1. 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', '注册成功请完成验证');
  1. 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');
    }
}
  1. Edit message content

resources/views/mail/reg.blade.php

<a href="{{route('confirmEmailToken', $user->email_token)}}">点击完成注册</a>
{{$user->email_token}}
  1. 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('/');
        }
    }
Published 40 original articles · won praise 0 · Views 778

Guess you like

Origin blog.csdn.net/qj4865/article/details/104198524