在laravel框架中有很多的功能特性需要跟进和熟悉。发送邮箱验证码和更新邮箱就是其中之一。我们往往会忽视这方面的细节,比如如何配置好邮箱发送的各种参数。当然还是有很多可以优化的地方,比如增加队列。
一般来说,我们来看看laravel发送邮箱验证码和更新邮箱的路由配置,示例代码如下:
//发送邮件验证码
$api->post('email/code',[\App\Http\Controllers\Auth\BindController::class,'emailCode']);
//更新邮箱
$api->patch('email/update',[\App\Http\Controllers\Auth\BindController::class,'updateEmail']);
绑定控制器的获取邮箱验证码和更新邮箱,示例代码如下:
/**
* 获取邮件的验证码
*/
public function emailCode(Request $request)
{
$request->validate([
'email' => 'required|email|unique:users'
]);
//发送验证码到邮件
Mail::to($request->input('email'))->queue(new SendCode($request->input('email')));
return $this->response->noContent();
}
/**
* 更新邮件
*/
public function updateEmail(Request $request)
{
$request->validate([
'email' => 'unique:users'
]);
//更新邮箱
$user = auth('api')->user();
$user->email = $request->input('email');
$user->save();
return $this->response->noContent();
}
Mail目录下的发送验证码类SendCode,示例代码如下
class SendCode extends Mailable
{
use Queueable, SerializesModels;
protected $email;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($email)
{
$this->email = $email;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
//生成code
$code = rand(1000,9999);
//缓存邮箱对应的code
Cache::put('email_code_'.$this->email,$code,now()->addMinute(15));
return $this->view('emails.send-code',[
'code' => $code
]);
}
}
邮箱模版如下:
您的邮箱验证码是{{$code}}
验证码15钟内有效,请及时使用。