Browse Source

feat(user): 添加手机号验证码登录功能

- 在 Captcha 类中新增 verify 方法用于验证码校验
- 新增 /mobileLogin 路由接口支持手机号登录
- UserController 中实现 mobileLogin 接口逻辑
- UserService 中增加 mobileLogin 业务处理方法
- 登录时验证手机号与验证码匹配性
- 集成验证码过期及错误提示机制
- 移除 SystemAdminService 中调试代码 var_dump
master
zhangf@suq.cn 6 days ago
parent
commit
95deae5267
  1. 9
      plugin/piadmin/app/controller/v1/UserLoginController.php
  2. 2
      plugin/piadmin/app/route/v1/route.php
  3. 1
      plugin/piadmin/app/service/SystemAdminService.php
  4. 20
      plugin/piadmin/app/service/UserService.php
  5. 20
      plugin/piadmin/app/utils/Captcha.php

9
plugin/piadmin/app/controller/v1/UserLoginController.php

@ -35,11 +35,16 @@ class UserLoginController extends BaseController
/**
* 手机号登录
* @param Request $request
* @return void
*/
public function mobileLogin(Request $request)
{
$params = $request->only([
'phone',
'code'
]);
// 用户登录
$res = $this->service->mobileLogin($params);
return success($res);
}

2
plugin/piadmin/app/route/v1/route.php

@ -25,6 +25,8 @@ Route::group('/piadmin/v1', function () {
Route::group('/user', function () {
//账号密码登录
Route::post('/login', [UserLoginController::class, 'login'])->setParams(['perm' => ['userLogin']]);
//手机验证码登录
Route::post('/mobileLogin', [UserLoginController::class, 'mobileLogin'])->setParams(['perm' => ['userMobileLogin']]);
//发送短信验证码
Route::post('/sendMsg', [UserLoginController::class, 'sendMsg'])->setParams(['perm' => ['userSendMsg']]);
});

1
plugin/piadmin/app/service/SystemAdminService.php

@ -65,7 +65,6 @@ class SystemAdminService extends BaseService
{
// 检查账号
$accountExist = $this->dao->be(['account' => $params['account']]);
var_dump($params['account']);
if ($accountExist) {
throw new ApiException(4040013);
}

20
plugin/piadmin/app/service/UserService.php

@ -6,6 +6,7 @@ use plugin\piadmin\app\base\BaseService;
use plugin\piadmin\app\dao\UserDao;
use plugin\piadmin\app\exception\ApiException;
use plugin\piadmin\app\utils\CacheUtils;
use plugin\piadmin\app\utils\Captcha;
use plugin\piadmin\app\utils\JwtUtils;
class UserService extends BaseService
@ -33,6 +34,25 @@ class UserService extends BaseService
return $tokenInfo;
}
public function mobileLogin($params)
{
$user = $this->dao->getModel()->where(function ($query) use ($params){
$query->where('phone', '=', $params['phone']);
})->find();
//验证码验证
if(env('APP_DEBUG') != true){
$captcha = new Captcha();
$res = $captcha->verify($params['phone'],$params['code'],"login");
if($res['code'] != 200){
throw new ApiException($res['msg']);
}
}
$tokenInfo = $this->commonLogin($user, $params);
$tokenInfo['user'] = $user->toArray();
$tokenInfo['expire_time'] = $tokenInfo['expire'] + time();
return $tokenInfo;
}
// ============================================================ 私有方法 ===============================================

20
plugin/piadmin/app/utils/Captcha.php

@ -48,6 +48,26 @@ class Captcha
}
/**
* 验证码验证
*
* @return
*/
public function verify($phone,$user_string,$type)
{
$code_cache = CacheUtils::get($phone.'_'.$type);
if(!$code_cache){
throw new ApiException("验证码已过期");
}
if(!hash_equals("$code_cache", "$user_string")){
throw new ApiException("验证码错误");
}
return [
'code' => 200,
'msg' => '验证通过'
];
}
/**
* 图形验证码
* @return array
*/

Loading…
Cancel
Save