php artisan make:model App\\Http\\Models\\Common\\UserActivation -m
複製代碼
執行了上面的命令以後,能夠看到在app/Http/Models/Common目錄下面建立了UserActivation的文件,以及在data目錄下建立了數據遷移文件,顯示如圖:php
在model文件中的最後有一個user方法,此方法是用來出來關聯關係的,既能夠根據user_activations表中的user_id來查詢出這個用戶的信息。html
注意在上面的遷移文件中,我在用戶激活表中添加一個外鍵'user_id',接下來執行數據遷移命令:laravel
php artisan migrate
複製代碼
這樣用戶激活表就已經建好了,下面處理用戶註冊信息填寫完畢後的邏輯。bash
在用戶填寫完註冊信息以後,須要對用戶添加的信息進行驗證,驗證經過以後才能寫入到數據表中。目前暫時假設都已經將用戶提交的信息能寫入到用戶表中,那麼咱們就須要修改保存用戶信息的方法,代碼以下:服務器
## App/Http/Controllers/Admin/UserController.php文件
/**
* 存儲用戶註冊信息的方法
*/
public function store(UserPostRequest $request) {
$data = $request->except('_token');
$data['password'] = Crypt::encrypt($data['password']);
$res = User::create($data);
if($res) {
$token = bcrypt( $res->email . time());
# 發送郵件
Mail::send( 'admin.email.test', [ 'user' => $result, 'token' => $token ], function ( $message ) use ( $result ) {
$subject = '愛麗社區激活郵件';
$message->to( $result->email )->subject( $subject );
} );
// 保存激活信息
$addData = [
'token' => $token,
'user_id' => $result->id,
];
$res = UserActivation::create($addData);
if ($res) {
return redirect( 'admin/user' );
} else {
return back()->with('errors', 'userActivation表數據填充失敗!');
}
} else {
return back()->with('errors', 'user表數據填充失敗!');
}
}
複製代碼
如今能夠註冊一個用戶,並填寫郵箱,能夠看到已經發送了一個激活郵件到註冊郵箱中,顯示如圖:閉包
固然在這裏,我使用laravel自帶的發送郵件的API,使用時須要先配置好郵件的配置項,詳情見在 Laravel 5.1 中使用SMTP驅動實現郵件發送(含附件和圖片)詳細教程app
如今須要在route.php文件中添加驗證路由:函數
Route::get('verify/account', 'Home\VerifyController@account');
複製代碼
在命令行中執行建立控制器的命令:post
php artisan make:controller Home/VerifyController --plain
複製代碼
在驗證激活郵件的控制器中添加account方法:網站
# App/Http/Controllers/Home/VerifyController.php文件
/**
* 驗證激活郵件的方法
*/
public function account()
{
$token = request( 'verify' );
$res = UserActivation::where('token', $token)->where('active', 0)->whereBetween('updated_at', [Carbon::now()->subDay(), Carbon::now()])->first();
if ($res) {
$res->update(['active'=>1]);
return redirect('/login');
}
return redirect('/');
}
複製代碼
如今註冊用戶時發送激活郵件和
使用郵件發送函數時,由於有閉包函數,因此沒法使用到外部的變量,以前的寫法,代碼以下所示:
Mail::send('admin.email.send', ['user'=>$result,'token'=>$token], function($message) {
$subject = '愛麗社區激活郵件';
$message->to( $result->email )->subject($subject);
});
複製代碼
可是這樣的寫法在執行的時候出現了錯誤,如圖:
通過搜索以後,找到了正確的寫法:
Mail::send('admin.email.send', ['user'=>$result,'token'=>$token], function($message) use ($result) {
$subject = '愛麗社區激活郵件';
$message->to( $result->email )->subject($subject);
});
複製代碼
如今能夠看到PHPstorm中也沒有錯誤信息,並且也能發送郵件信息。
在註冊信息提交完畢以後,系統會給註冊用戶的郵箱中發送一份郵件,這2個過程是同步進行的,致使響應時間比較長,因此須要解決這個問題(能夠參考隊列的方式),下篇文章中再處理這個響應時間過長的問題。