Laravel——注册发邮箱激活

很多时候,为了避免用户注册多个帐号,所以邮箱激活是一个很好的并且很方便的限制。下面是从laravel-china学习到的注册激活方法。

  1. 表迁移及增加字段迁移

因为框架的database/migrations下有已经生成好的迁移表,我们可以直接跑命令生成数据表

php artisan migrate
复制代码

生成了users表,可是我们在激活功能中,需要一个激活令牌的(activation_token)和激活状态(activated)。由于我们进行的是字段添加的操作,因此在迁移文件命名的时候,需要按规范来add_column_to_table,然后--table=数据表,最终命令如下:

php artisan make:migration add_activation_to_users_table --table=users
复制代码

打开database/migrations/年_月_日_后面6位时间戳_add_activation_to_users_table的文件进行编辑

class AddActivationToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('activation_token')->nullable(); //可以为空
            $table->boolean('activated')->default(false);   //默认为false
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('activation_token');
            $table->dropColumn('activated');
        });
    }
}
复制代码

接着我们需要运行迁移,将字段加到users表里。

php artisan migrate
复制代码

你可以看到用户users表里就有了activation_tokenactivated两个字段。

  1. 激活发邮件方法

在你的UsersController里写一个registerActivate的私有方法,接收$user

use Email;  //引用Email类
.  
.  
private function registerActivate($user) {
    $view = 'email.confirm';    //发送邮箱的模版文件
    $data = compact('user');    //发送到模版的数据
    $to = $user->email;         //邮箱接收地址
    $subject = '感谢您的注册!请确认你的邮箱。'
    
    Email::send($view, $data, function($message) use ($to, $subject) {
        $message->to($to)->subject($subject);
    });
}
复制代码

方法写好了,然后在你的注册方法里进行调用。一般是写在插入数据库表的后面。

.
.
$user = User::create([
    'name'=> $request->name,
    'email'=> $request->email,
    'password'=> bcrypt($request->password)
]);
//发邮件激活
$this->sendEmailConfirmationTo($user);
.
.
复制代码
  1. 创建comfirm邮箱模版

这里在resources/views/emails/下自行创建一个模版create.blade.php,然后根据自己想要的内容进行书写。不过需要以下内容

<a href="{{ route('confirm_register') }}">{{ route('confirm_register') }}</a>
复制代码

这个是路由是点击跳到第4步的方法里。

  1. 创建验证令牌方法

这里,我单独创建一个EmailController,首先写路由

Route::get('/signup/confirm/{token}', 'UsersController@confirm')->name('confirm_register');
复制代码

再在UsersController里创建一个confirm的方法

public function confirm($token) {
    //通过$token找到对应的用户
    $user = User::where('activation_token', $token)->findOrFail();
    
    //将其激活并清空activation_token
    $user->activated = true;
    $user->activation_token = null;
    $user->save();
    
    //做一个闪存进行提示
    session()->flash('success', '恭喜你,激活成功!')
    
    //自动登录(如果没有引入,自行引入Auth)
    Auth::login();  
    //跳转到用户个人显示页面
    return redirect()->route('users.show',[$user]);
}
复制代码
  1. .env文件下修改自己的邮箱配置。具体可以参考我的Laravel——通过邮件找回密码的第5点。

  2. 总结

在这次笔记里,学到的新知识点有:

  1. 数据表添加新字段的迁移方法。
  2. 邮箱Email类的发邮件方法
  3. 注册激活邮箱的思路:
    • 首先,点击注册,发激活邮件,带着需要激活的闪存,跳到首页。
    • 用户会收到一份带有激活链接的邮件,点击邮件地址,访问confirm方法,通过令牌找到用户,将其字段activated改为true
    • 然后又带着激活成功的闪存,跳到首页,显示激活成功。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值