很多时候,为了避免用户注册多个帐号,所以邮箱激活是一个很好的并且很方便的限制。下面是从
laravel-china
学习到的注册激活方法。
-
表迁移及增加字段迁移
因为框架的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_token
和activated
两个字段。
-
激活发邮件方法
在你的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);
.
.
复制代码
-
创建comfirm邮箱模版
这里在resources/views/emails/
下自行创建一个模版create.blade.php
,然后根据自己想要的内容进行书写。不过需要以下内容
<a href="{{ route('confirm_register') }}">{{ route('confirm_register') }}</a>
复制代码
这个是路由是点击跳到第4步的方法里。
-
创建验证令牌方法
这里,我单独创建一个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]);
}
复制代码
-
在
.env
文件下修改自己的邮箱配置。具体可以参考我的Laravel——通过邮件找回密码的第5点。 -
总结
在这次笔记里,学到的新知识点有:
- 数据表添加新字段的迁移方法。
- 邮箱Email类的发邮件方法
- 注册激活邮箱的思路:
- 首先,点击注册,发激活邮件,带着需要激活的闪存,跳到首页。
- 用户会收到一份带有激活链接的邮件,点击邮件地址,访问
confirm
方法,通过令牌找到用户,将其字段activated
改为true - 然后又带着激活成功的闪存,跳到首页,显示激活成功。