laravel网站开发实例----4
  TEZNKK3IfmPf 2023年11月12日 19 0

上一篇实现了发邮件验证码的功能,现在来写整个注册的逻辑
当用户发起注册的时候,给用户邮箱发送验证码,并存储到缓存中,当用户注册的时候,给验证码和验证码对应的Key即可注册成功,避免暴力破解。
两个接口的代码
1、用户得到验证码

<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use Mail;
class UsersController extends Controller
{
//用邮件发送验证码,并存储到缓存中
public function store(Request $request)
{
$this->validate($request,[
'email' => 'required|unique:users',
]);
// 生成4位随机数,左侧补0
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
$email = $request->email;
//发送邮件验证码
$name = $request->name;
$flag = Mail::send('test',['name'=>$name,'code'=>$code],function($message) use ($email){
$to = $email;
$message ->to($to)->subject('验证码');
});
$info = "邮件已发送,如长时间没收到邮件,请重试";

$key = 'RegisterCodes'.str_random(15);
$expiredAt = now()->addMinutes(10);
// 缓存验证码 10分钟过期。
\Cache::put($key, ['email' => $request->email, 'code' => $code], $expiredAt);

return $this->response->array([
'key' => $key,
'expired_at' => $expiredAt->toDateTimeString(),
'info' => $info,
])->setStatusCode(201);
}
}

2、根据验证码注册

<?php

namespace App\Http\Controllers\Api;
use App\Models\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class UsersRegisterController extends Controller
{
//
public function store(Request $request){
$this->validate($request,[
'schoolid' => 'required|unique:users|max:10',
'email' => 'required|unique:users',
'password' => 'required|min:8|max:16',
]);
$verifyData = \Cache::get($request->verification_key);
if (!$verifyData) {
return response('验证码失效',200);
}
$code = $request->verification_code;
if (hash_equals($verifyData['code'],$code)){
//如果验证成功,就将所有信息存入数据库
$user = User::create([
'name' => $request->name,
'schoolid' =>$request->schoolid,
'email' => $verifyData['email'],
'password' => bcrypt($request->password),
'sex' =>$request->sex,
'xueyuan'=>$request->xueyuan,
'zhuanye'=>$request->zhuanye,
'shifouhuiyuan' => 0,
]);
\Cache::forget($request->verification_key);
return $this->response->created();
}else{
$rs['info'] = '验证码错误';
$rs['status'] = '400';
return response($rs,200);
}
}
}

这里说一下,当使用模型类的时候,直接使用 模型类:: 例如,创建新的用户

$user = User::create([
'name' => $request->name,
'schoolid' =>$request->schoolid,
'email' => $verifyData['email'],
'password' => bcrypt($request->password),
'sex' =>$request->sex,
'xueyuan'=>$request->xueyuan,
'zhuanye'=>$request->zhuanye,
'shifouhuiyuan' => 0,
]);

使用缓存的方法:

//存储到缓存中
\Cache::put($key, ['email' => $request->email, 'code' => $code],
//从缓存中取出
\Cache::get($request->verification_key);
//从缓存中清除
\Cache::forget($request->verification_key);

3、路由设置

$api = app('Dingo\Api\Routing\Router');

$api->version('v1', [
'namespace' => 'App\Http\Controllers\Api'
], function($api) {
//短信验证码
$api->post('registerCodes', 'UsersController@store')
->name('api.registerCodes.store');
//用户注册
$api->post('users','UsersRegisterController@store')
->name('api.users.store');
});

下一讲 用户管理系统接口全实现

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月12日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年04月26日   41   0   0 缓存
  TEZNKK3IfmPf   2024年04月19日   39   0   0 java验证码
TEZNKK3IfmPf