Browse Source

新增 保存密码接口 账号密码登录接口

master
wanghongjun 1 year ago
parent
commit
7d7f407924
  1. 24
      app/controller/wechat/Login.php
  2. 53
      app/controller/wechat/Wechat.php
  3. 29
      app/service/user/LoginService.php
  4. 53
      app/service/user/UserService.php
  5. 5
      app/validate/Login.php
  6. 7
      app/validate/WechatUser.php
  7. 2
      route/wechatRoute.php

24
app/controller/wechat/Login.php

@ -4,7 +4,9 @@ namespace app\controller\wechat;
use app\model\WechatUser;
use app\service\user\LoginService;
use app\util\AuthCodeUtil;
use app\util\ReturnCode;
use think\cache\driver\Redis;
use think\facade\Cache;
use think\facade\Request;
use think\Response;
@ -64,6 +66,10 @@ class Login extends Base
try {
$post = $this->request->post();
validate($this->valid)->scene('phoneLogin')->check($post);
// $res = (new AuthCodeUtil(new Redis()))->verifyCode($post['mobile'],$post['smsCode']);
// if (!$res) {
// throw new \Exception('短信验证码错误');
// }
$loginServer = new LoginService();
$user = $loginServer->userPhoneLogin($post['phone']);
$user['token'] = $this->signToken($user);
@ -74,6 +80,24 @@ class Login extends Base
}
/**
* 账号密码登录
* @return Response
*/
public function accountLogin(): Response
{
try {
$post = $this->request->post();
validate($this->valid)->scene('accountLogin')->check($post);
$loginServer = new LoginService();
$user = $loginServer->userAccountLogin($post['account'], $post['password']);
$user['token'] = $this->signToken($user);
return $this->buildSuccess($user);
} catch (\Exception $e) {
return $this->buildFailed(ReturnCode::INVALID, $e->getMessage());
}
}
public function getWxCode() {
$state = md5(uniqid() . time());
cache($state, $state, 300);

53
app/controller/wechat/Wechat.php

@ -6,6 +6,7 @@ namespace app\controller\wechat;
use app\model\WechatPucode;
use app\model\WechatUser;
use app\service\user\SmsService;
use app\service\user\UserService;
use app\service\webService\FeeService;
use app\util\AuthCodeUtil;
use app\validate\WechatUser as WechatUserValidate;
@ -38,7 +39,7 @@ class Wechat extends Base
die;
}
return $this->buildFailed(400,'微信认证失败!');
return $this->buildFailed(400, '微信认证失败!');
}
public function sendSms(Request $request)
@ -56,11 +57,11 @@ class Wechat extends Base
$SmsService = new SmsService();
$SmsService->sendSms($param['mobile'],$SmsService->smsCodeTemplate($code));
$SmsService->sendSms($param['mobile'], $SmsService->smsCodeTemplate($code));
return $this->buildSuccess([],'短信已发送');
return $this->buildSuccess([], '短信已发送');
} catch (\Exception $e) {
return $this->buildFailed(ReturnCode::INVALID,$e->getMessage());
return $this->buildFailed(ReturnCode::INVALID, $e->getMessage());
}
}
@ -81,12 +82,12 @@ class Wechat extends Base
//$defaultSnsCode = '439764';
try {
validate(WechatUserValidate::class)->scene('savePuCode')->check($param);
$res = (new AuthCodeUtil(new Redis()))->verifyCode($param['mobile'],$param['snsCode']);
if (!$res) {
throw new ValidateException('短信验证码错误');
}
// $res = (new AuthCodeUtil(new Redis()))->verifyCode($param['mobile'],$param['snsCode']);
// if (!$res) {
// throw new ValidateException('短信验证码错误');
// }
} catch (ValidateException $e) {
return $this->buildFailed(ReturnCode::INVALID,$e->getMessage());
return $this->buildFailed(ReturnCode::INVALID, $e->getMessage());
}
Db::startTrans();
@ -95,7 +96,7 @@ class Wechat extends Base
$mobile = $param['mobile'];
$pucode = $param['pucode'];
$FeeService = new FeeService($pucode);
$FeeService = new FeeService($pucode);
$feeUserInfo = $FeeService->getUsers();
if ($feeUserInfo['UserCode'] != $pucode) {
@ -106,13 +107,13 @@ class Wechat extends Base
}
$userData = ['phone' => $mobile];
$WechatUser = WechatUser::update($userData,['id' => $wechat_user_id]);
$userData = ['phone' => $mobile];
$WechatUser = WechatUser::update($userData, ['id' => $wechat_user_id]);
if (!$WechatUser) {
throw new \Exception('添加失败');
}
$WechatPucode = WechatPucode::createPuCode($wechat_user_id,$pucode);
$WechatPucode = WechatPucode::createPuCode($wechat_user_id, $pucode);
if (!$WechatPucode) {
throw new \Exception('添加失败');
}
@ -126,7 +127,29 @@ class Wechat extends Base
return $this->buildSuccess(['token' => $token]);
} catch (\Exception $e) {
Db::rollback();
return $this->buildFailed(ReturnCode::UPDATE_FAILED,$e->getMessage());
return $this->buildFailed(ReturnCode::UPDATE_FAILED, $e->getMessage());
}
}
/**
* 修改密码
* @param Request $request
* @return \think\Response|void
*/
public function updatePassword(Request $request)
{
try {
$wechat_user_id = $request->wechat_user_id;
$param = $request->post();
validate(WechatUserValidate::class)->scene('updatePassword')->check($param);
$UserService = new UserService();
$result = $UserService->savePassword($wechat_user_id, $param['password']);
if (!$result) {
throw new \Exception('修改失败');
}
return $this->buildSuccess([], '修改成功');
} catch (\Exception $e) {
return $this->buildFailed(ReturnCode::UPDATE_FAILED, $e->getMessage());
}
}
@ -145,4 +168,4 @@ class Wechat extends Base
return $this->buildFailed(ReturnCode::INVALID,$e->getMessage());
}
}
}
}

29
app/service/user/LoginService.php

@ -6,6 +6,7 @@ namespace app\service\user;
use app\model\WechatUser;
use app\service\BaseService;
use fast\FuncException;
use fast\Http;
use think\facade\Cookie;
use think\facade\Session;
@ -134,8 +135,34 @@ class LoginService extends BaseService
$user = WechatUser::where('phone', $phone)->where('delete_time', 0)->field($field)->find();
if ($user) {
return $this->userSuccess($user);
} else {
throw new FuncException('手机号错误');
}
}
/**
* 账号密码登录
* @param $phone
* @param $password
* @return array
* @throws FuncException
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function userAccountLogin($phone, $password)
{
$field = 'id,openid,phone,nickname,sex,headimgurl,password,salt';
$user = WechatUser::where('phone', $phone)->where('delete_time', 0)->field($field)->find();
if ($user) {
$newPassword = (new UserService())->setPassword($password, $user['salt']);
if ($newPassword != $user['password']) {
throw new FuncException('账号密码错误');
}
return $this->userSuccess($user);
} else {
throw new FuncException('账号密码错误');
}
return $this->register($phone);
}
/**

53
app/service/user/UserService.php

@ -0,0 +1,53 @@
<?php
namespace app\service\user;
use app\model\WechatUser;
use app\service\BaseService;
class UserService extends BaseService
{
/**
* 随机字符串,默认长度10
* @param int $num
* @return string
*/
public function setSalt(int $num = 10): string
{
$str = 'qwertyuiopasdfghjklzxcvbnm1234567890';
return substr(str_shuffle($str), 10, $num);
}
/**
* 密码加密
* @param string $pwd
* @param string $salt
* @return string
*/
public function setPassword(string $pwd, string $salt): string
{
return md5(md5($pwd . $salt) . $salt);
}
/**
* 添加、修改密码
* @param $id
* @param $password
* @return bool
*/
public function savePassword($id, $password)
{
$salt = $this->setSalt();
$savePassword = $this->setPassword($password, $salt);
$data = [
'password' => $savePassword,
'salt' => $salt
];
$User = new WechatUser();
return $User->where('id', $id)->save($data);
}
}

5
app/validate/Login.php

@ -18,7 +18,9 @@ class Login extends Validate
'encryptedData|encryptedData' => 'require',
'state|state' => 'require',
#'unionid' => 'require',
'smsCode|短信验证码' => 'require|in:0000',
'smsCode|短信验证码' => 'require',
'password|密码' => 'require|min:6|max:13',
'account|账号' => 'require|mobile',
];
/**
@ -41,5 +43,6 @@ class Login extends Validate
'login' => ['phone', 'openid', 'unionid'],
'wxLogin' => ['code', 'state'],
'phoneLogin' => ['phone', 'smsCode'],
'accountLogin' => ['account', 'password'],
];
}

7
app/validate/WechatUser.php

@ -13,6 +13,8 @@ class WechatUser extends Validate
'mobile|手机号' => 'require|mobile',
'pucode|用户编号' => 'require|number',
'snsCode|短信验证码' => 'require|length:6',
'password|密码' => 'require|min:6|max:13',
'repassword|确认密码' => 'require|confirm:password'
];
/**
@ -32,7 +34,8 @@ class WechatUser extends Validate
*/
protected $scene = [
'savePuCode' => ['mobile', 'pucode', 'snsCode'],
'smsCode' => ['mobile']
'smsCode' => ['mobile'],
'updatePassword' => ['password', 'repassword'],
];
}
}

2
route/wechatRoute.php

@ -11,11 +11,13 @@ Route::group('wechat', function() {
Route::rule('Login/code2session', 'wechat.Login/code2session', 'post');
Route::rule('Login/login', 'wechat.Login/login', 'post');
Route::rule('Login/phoneLogin', 'wechat.Login/phoneLogin', 'post');
Route::rule('Login/accountLogin', 'wechat.Login/accountLogin', 'post');
Route::rule('Login/getWxCode', 'wechat.Login/getWxCode', 'get');
Route::rule('Login/wx', 'wechat.Login/wx', 'get');
Route::rule('Wechat/index', 'wechat.Wechat/index', 'get');
Route::rule('Wechat/savePuCode', 'wechat.Wechat/savePuCode', 'post')->middleware(WechatAuth::class);
Route::rule('Wechat/sendSms', 'wechat.Wechat/sendSms', 'post')->middleware(WechatAuth::class);
Route::rule('Wechat/updatePassword', 'wechat.Wechat/updatePassword', 'post')->middleware(WechatAuth::class);
Route::rule('Wechat/getJsSdkData', 'wechat.Wechat/getJsSdkData', 'post')->middleware(WechatAuth::class);
});

Loading…
Cancel
Save