一个好的登入系统,当然少不了忘记密码的功能,这个功能通常是使用寄email功能做的。
例如我现在的专案使用的是一个简单的流程
流程相当简单,只要两个function就可以搞定,一个是发送email的api,另一个是token验证的api,验证成功後将密码更变为预设密码。
laravel的寄送email功能有简单也有复杂,目前我寄送的mail是很简单的几个字,所以我目前使用最简单的方式寄信。
要寄信的话,理所当然会有用来寄信用的server,这当然有很多选择例如mailgun之类的,我个人是使用Gmail寄信。
使用Gmail寄信的话,Google帐户必须要设定两步骤验证机制。以及laravel的.env设定
MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=25
MAIL_USERNAME=填入Gmail帐号
MAIL_PASSWORD=填入验证码
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=xxx.gmail.com
MAIL_FROM_NAME="${APP_NAME}"
use Illuminate\Support\Facades\Mail;
public function mail($email)
{
$user = Users::where('email', $email)->first();
if (!$user) {
return response()->json(['status' => false, 'error' => 'email false'], 400);
}
$userToken = $user->remember_token;
$url = "http://127.0.0.1:8003/api/password/change/$userToken";
$text = '点此修改密码为 a00000000 ' . $url;
Mail::raw($text, function ($message) use ($email) {
$message->to($email)->subject('hiyaa');
});
return response()->json(['status' => true,], 200);
}
在发送mail的function,我将token放在mail内寄给使用者,使用者点击mail内的连结,将会用Get method发送request,URL夹带token,现在我必须验证此token後,将密码改成预设密码。
public function change_password($userToken)
{
$user = Users::where('remember_token', $userToken)->first();
if (!$user) {
return response()->json(['status' => false, 'error' => 'token false'], 400);
}
$hash = password_hash('a00000000', PASSWORD_DEFAULT);
$user->update(['password' => $hash]);
return response()->json(['status' => true, 'message' => 'password had be changed'], 200);
}
这样便完成一个简单的忘记密码功能了,不过这项功能现在还很简陋,之後应该会再持续改进,应该也有其他的流程可以试试看,例如发送简讯验证码之类的,之後若另有心得再来分享,今天就介绍到这边,明天见。
<<: Modal in React ( Declarative Modal ) (2)
上一篇分享过「何谓团队文化」後,在讨论如何建立与经营团队文化前,我们先从了解目前的状况与定义你希望有...
前言:讲解完了基础的排序法後,接着要来讲解比较高等的排序法,今天和明天要介绍的都是始於分割资料的排序...
storyboard 有三个概念是最容易混淆: xib:实际是个xml文件,xib = XML n...
Docker及Laravel为以後每个专案都会用到的搭配,所以这种时候就将它做成一个类似模板的环境并...
先做了一个简易的文件创建页面 doc_info/views.py 设定成用get载入http://1...