Laravel学习笔记(14)通过邮箱验证码完成注册

  1. 给数据库User表添加邮箱令牌以及是否活跃字段

方法一: 普通方法

database/migrations/2014_10_12_000000_create_users_table.php 追加字段

	$table->string('email_token')->unique();
	$table->tinyInteger('email_alive')->default(0);

database/factories/UserFactory.php 追加数据

	'email_token' => Str::random(10),
	'email_alive' => false,

重新生成数据表

artisan migrate:fresh --seed 

方法二: 模型事件

Laravel 的 Events(事件) 及 Observers(观察者)
Laravel 模型事件执行顺序

database/migrations/2014_10_12_000000_create_users_table.php 追加字段

	$table->string('email_token')->unique();
	$table->tinyInteger('email_alive')->default(0);

生成observer文件

artisan make:observer UserObserver

在文件中写入模型事件

class UserObserver
{
    public function creating(User $user) {
        $user->email_token = Str::random(10); // 生成十位验证码
        $user->email_alive = false;

    }
}

app/Providers/AppServiceProvider.php中进行注册

    public function boot()
    {
        User::observe(UserObserver::class);
    }

重新生成数据表

artisan migrate:fresh --seed 
  1. 在控制中添加验证方法,并添加路由
    public function confirmEmailToken($token) {
    	...
    }
Route::get('confirmEmailToken/{token}', 'UserController@confirmEmailToken')->name('confirmEmailToken');
  1. 控制器store方法中添加邮箱发送验证码功能
		// 创建注册数据
        $user = User::create($data);
        // 发送验证邮件
        \Mail::to($user)->send(new RegMail($user));
        session()->flash('success', '注册成功请完成验证');
  1. 修改RegMail方法
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. 编辑邮件内容

resources/views/mail/reg.blade.php

<a href="{{route('confirmEmailToken', $user->email_token)}}">点击完成注册</a>
{{$user->email_token}}
  1. 编辑验证方法
    public function confirmEmailToken($token) {
        $user = User::where('email_token', $token)->first();
        if ($user) {
            $user->email_active = true;
            $user->save();
            session()->flash('success', '注册成功');
            return redirect('/');
        }
    }
发布了40 篇原创文章 · 获赞 0 · 访问量 778

猜你喜欢

转载自blog.csdn.net/qj4865/article/details/104198524