You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

237 lines
7.4 KiB

<?php
namespace app\base\controller\user\api;
use app\project\model\ProjectCheck;
use think\App;
use think\facade\Db;
class Login extends Base
{
/**
* 发送手机验证码
* @param string $param ['mobile_phone'] 新手机号
* @param string $param ['type'] 验证码场景 1--注册或登录发送验证码 2--绑定手机号 3--修改密码 4--换绑手机号验证之前手机号 5--换绑手机号绑定新手机号
* @date 2022-10-10
*/
public function sendCodeMessage()
{
$param = input('post.');
$validate = [
'type' => 'number',
'mobile_phone' => 'require|mobile',
];
$this->validate($param, $validate, [
'mobile_phone.require' => '请输入手机号',
'mobile_phone.mobile' => '请输入正确的手机号'
]);
$param['type'] = $param['type'] ?? 1;
$login_logic = new \app\base\logic\user\Login();
$result = $login_logic->sendCodeMessage($param['mobile_phone'], $param['type']);
if ($result['code']) {
return json($result);
}
return json($result);
}
/**
* 修改密码
* @date 2022-10-12
*/
public function updatePassword()
{
$param = input('post.');
$validate = [
'mobile_phone' => 'require|mobile',
'code' => 'require|number|length:4',
'password' => 'require|graph|min:6',
'password_confirm' => 'require|confirm:password',
];
$this->validate($param, $validate, [
'mobile_phone.require' => '请输入手机号',
'mobile_phone.mobile' => '手机号码格式不正确',
'code.require' => '请输入验证码',
'code.number' => '验证码格式有误',
'code.length' => '验证码长度有误',
'password.require' => '请输入新密码',
'password.graph' => '密码格式有误',
'password.min' => '密码最低长度为6位',
'password_confirm.require' => '请再次输入新密码',
'password_confirm.confirm' => '您输入的两次密码不同'
]);
$login_logic = new \app\base\logic\user\Login();
$result = $login_logic->updatePassword($param['password'], $param['mobile_phone'], $param['code']);
if ($result['code']) {
return json($result);
}
return json($result);
}
/**
* 获取默认地址
* @param string $param ['mobile_phone'] 手机号
* @param string $param ['code'] 验证码
* @date 2022-10-10
*/
public function verifyOldMobilePhone()
{
$param = input('post.');
// 参数校验
$validate = [
'mobile_phone' => 'require',
'code' => 'require',
];
$this->validate($param, $validate, [
'mobile_phone.require' => '请输入手机号',
'code.require' => '请输入验证码'
]);
$login_logic = new \app\base\logic\user\Login();
$result = $login_logic->verifyOldMobilePhone($param['mobile_phone'], $param['code'], 4);
if ($result['code']) {
return json($result);
}
return json($result);
}
/**
* 更换手机号第二步--绑定新手机号
* @param string $param ['mobile_phone'] 新手机号
* @param string $param ['code'] 验证码
* @param string $param ['mobile_phone_old'] 旧手机号
* @date 2022-10-10
*/
public function bindNewMobilePhone()
{
$param = input('post.');
$validate = [
'mobile_phone' => 'require|different:mobile_phone_old',
'mobile_phone_old' => 'require',
'code' => 'require',
];
$this->validate($param, $validate, [
'mobile_phone.require' => '请输入手机号',
'mobile_phone.different' => '新手机号不能和旧手机号一致',
'mobile_phone_old.require' => '没有获取到旧手机号',
'code.require' => '请输入验证码',
]);
$login_logic = new \app\base\logic\user\Login();
$result = $login_logic->bindNewMobilePhone($param['mobile_phone'], $param['code'], $param['mobile_phone_old']);
if ($result['code']) {
return json($result);
}
return json($result);
}
/**
* 用户登录&注册
* @date 2021-02-25
*/
public function login()
{
$param = input('post.');
$param['last_user_id'] = input('post.last_user_id', '');
$param['third_type'] = input('post.third_type', ''); //APP登录时可能有
$param['third_id'] = input('post.third_id', ''); //APP登录时可能有
$validate = [
'type' => 'require|in:1,2',
'mobile_phone' => 'require|mobile',
];
if ($param['type'] == 1) {
$validate['code'] = 'require';
} else if ($param['type'] == 2) {
$validate['password'] = 'require';
}
$this->validate($param, $validate, [
'mobile_phone.require' => '请输入手机号',
'mobile_phone.mobile' => '请输入正确的手机号'
]);
$check_model = new ProjectCheck();
$user_logic = new \app\base\logic\User();
$jwt_class = new \jwt\Jwt();
$login_service = new \app\base\service\user\Login();
//根据不同平台组合info参数
$info = TOKEN_DATA;
$info['user_agent'] = USER_AGENT;
Db::startTrans();
if ($param['type'] == 1) { //1--手机号验证码登录 2--账号密码登录
$is_check = $check_model->isCheck(); //如果是审核状态则不校验验证码
if ($is_check != 1) {
// 检查验证码是否正确
$res = $login_service->checkCode($param['mobile_phone'], $param['code'], 1);
if ($res['code'] != 0) {
Db::rollback();
return json($res);
}
} else {
# TODO 手机号是否为系统已存在手机号 如果不是 提示审核人员输入提供手机号
}
} else if ($param['type'] == 2) {
//检查密码是否正确
$res = $user_logic->checkPassword($param['mobile_phone'], $param['password']);
if ($res['code'] != 0) {
Db::rollback();
return json($res);
}
}
//登录并更新相关信息
$res = $user_logic->login($param['mobile_phone'], $info, $param['last_user_id'], $param['third_type'], $param['third_id']);
if ($res['code'] != 0) {
Db::rollback();
return json($res);
}
$user_id = $res['data']['user_id']; //USER_ID
Db::commit();
//绑定三方平台
// 签发token
$arr = TOKEN_DATA;
$arr['user_id'] = $user_id;
$res_token = $jwt_class->signToken($arr);
return sendSuccessMessage([
'user_id' => $user_id,
'access_token' => $res_token['token'],
'access_token_expire_time' => $res_token['exp'],
]);
}
/**
* 用户退出登录(APP/H5)
* @date 2022-12-27
*/
public function logout()
{
$param = input('post.');
$login_logic = new \app\base\logic\user\Login();
$result = $login_logic->logout();
return json($result);
}
}