Commit 81c5a8f0 authored by liuyuzhen's avatar liuyuzhen

登录注册相关修改

parent 10ee6f3c
...@@ -441,7 +441,7 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -441,7 +441,7 @@ class MemberServiceModel extends \Business\AbstractModel
} }
public function saveOtherMemberInfo($where,$memberId){ public function saveOtherMemberInfo($where,$memberId,$saveDeviceFlag=false){
//第二步保存扫码会员信息 //第二步保存扫码会员信息
$result = $this->saveStoreMembers($memberId); $result = $this->saveStoreMembers($memberId);
if(!$result){ if(!$result){
...@@ -449,9 +449,11 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -449,9 +449,11 @@ class MemberServiceModel extends \Business\AbstractModel
} }
//第三步保存用户设备识别信息 //第三步保存用户设备识别信息
$memberDeviceResult = $this->saveRegisterDeviceInfo($where,$memberId); if(!$saveDeviceFlag){
if(!$memberDeviceResult){ $memberDeviceResult = $this->saveRegisterDeviceInfo($where,$memberId);
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveMemberDeviceInfoFailed); if(!$memberDeviceResult){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::saveMemberDeviceInfoFailed);
}
} }
...@@ -497,15 +499,20 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -497,15 +499,20 @@ class MemberServiceModel extends \Business\AbstractModel
//开始事务 //开始事务
$db->doTransaction(); $db->doTransaction();
$saveDeviceFlag=true;
$memberId = $this->checkMemberMappingExist($where);//检查登录的用户是否授权从其他第三方登录
if(!$memberId){
$saveDeviceFlag = false;
$memberId = $this->saveRegisterMemberInfo($where);
}
//保存用户信息 //保存用户信息
$memberId = $this->saveRegisterMemberInfo($where);
if(!$memberId){ if(!$memberId){
$db->doRollback(); $db->doRollback();
\Error\ErrorModel::throwException(\Error\CodeConfigModel::addMemberInfoFailed); \Error\ErrorModel::throwException(\Error\CodeConfigModel::addMemberInfoFailed);
} }
//保存用户其他相关信息 //保存用户其他相关信息
$this->saveOtherMemberInfo($where,$memberId); $this->saveOtherMemberInfo($where,$memberId,$saveDeviceFlag);
$db->doCommit(); $db->doCommit();
...@@ -520,6 +527,38 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -520,6 +527,38 @@ class MemberServiceModel extends \Business\AbstractModel
} }
/**
* 注册时检查当前用户是否第三方授权,以及三方授权是否已经存在对应用户
*/
public function checkMemberMappingExist($where){
$authInfo = $this->memberDb0Redis->find(\Our\NameConst::authInfoPrefix.$where['key']);
if(!$authInfo){
return false;
}
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$memberMapping = $memberMappingDao->find(array('openid'=>$authInfo['openid']));
if(!$memberMapping){
return false;
}
$memberDao = \DAO\MemberModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$existMember = $memberDao->find($memberMapping['member_id']);
if(!$existMember){
$memberMappingDao->del(array('id'=>$memberMapping['id']));
return false;
}
if($existMember['member_mobile']&&$existMember['member_mobile_bind']){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::registerMemberInfoFailed);
}
$member['member_mobile'] = $where['mobile'];
$member['member_mobile_bind'] = \Our\ApiConst::one;
$member['member_passwd'] = md5($where['password']);
$updateMemberResult = $memberDao->saveInfo($member,$memberMapping['member_id']);
if(!$updateMemberResult){
\Error\ErrorModel::throwException(\Error\CodeConfigModel::authMemberExistMobile);
}
return $memberMapping['member_id'];
}
public function cancelBinding($data,$memberId){ public function cancelBinding($data,$memberId){
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName); $memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$memberMappingDao->validCancelMapping($data,$memberId); $memberMappingDao->validCancelMapping($data,$memberId);
...@@ -653,9 +692,12 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -653,9 +692,12 @@ class MemberServiceModel extends \Business\AbstractModel
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName); $memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
if($where['userType'] == \Our\ApiConst::wechatUserType){ if($where['userType'] == \Our\ApiConst::wechatUserType){
$condition['openid'] = $this->getUnionId($where['encryptedData'],$where['iv'],$where['session_key']); $condition['openid'] = $this->getUnionId($where['encryptedData'],$where['iv'],$where['session_key']);
$condition['user_type'] = array('in',array(\Our\ApiConst::wechatUserType,\Our\ApiConst::userFromWx));
}else{ }else{
$condition['openid'] = $where['openid']; $condition['openid'] = $where['openid'];
}
if($where['userType'] == \Our\ApiConst::wechatUserType||$where['userType'] == \Our\ApiConst::userFromWx){
$condition['user_type'] = array('in',array(\Our\ApiConst::wechatUserType,\Our\ApiConst::userFromWx));
}else{
$condition['user_type'] = $where['userType']; $condition['user_type'] = $where['userType'];
} }
$memberMappings = $memberMappingDao->getList($condition,'member_id'); $memberMappings = $memberMappingDao->getList($condition,'member_id');
...@@ -664,14 +706,30 @@ class MemberServiceModel extends \Business\AbstractModel ...@@ -664,14 +706,30 @@ class MemberServiceModel extends \Business\AbstractModel
$memberIds = array_column($memberMappings,'member_id'); $memberIds = array_column($memberMappings,'member_id');
$member = $memberDao->getMemberForLogin($memberIds); $member = $memberDao->getMemberForLogin($memberIds);
if($where['userType'] == \Our\ApiConst::wechatUserType){ if($where['userType'] == \Our\ApiConst::wechatUserType){
$this->checkMemberMappingExist($member['member_id'],$condition['openid'] ,$where['userType']); $this->checkMemberMappingExistLogin($member['member_id'],$condition['openid'] ,$where['userType']);
}
if($where['userType'] == \Our\ApiConst::userFromWx){//如果当前openid存在对应的小程序码但是对应用户并没有绑定手机号码时 ,也需要绑定手机号码
if($member['member_mobile']&&$member['member_mobile_bind']){
$this->checkMemberMappingExistLogin($member['member_id'],$condition['openid'] ,$where['userType']);
}else{
return false;
}
} }
return $member; return $member;
} }
return false; return false;
} }
public function checkMemberMappingExist($memberId,$openid,$userType){ /**
* 小程序登录时检测当前openid(实际上存储的是unionid)是否存在对应的对应的手机账号,存在则直接登录,并且检查是否有对应记录,有直接写入,没有则不写入
* @param $memberId
* @param $openid
* @param $userType
* @return bool
* @throws \Error\OurExceptionModel
* @throws \Exception
*/
public function checkMemberMappingExistLogin($memberId,$openid,$userType){
$memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName); $memberMappingDao = \DAO\MemberMappingModel::getInstance(\Our\DbNameConst::masterDBConnectName);
$condition['member_id'] = $memberId; $condition['member_id'] = $memberId;
$condition['openid'] = $openid; $condition['openid'] = $openid;
......
...@@ -108,6 +108,9 @@ class MemberModel extends \DAO\AbstractModel ...@@ -108,6 +108,9 @@ class MemberModel extends \DAO\AbstractModel
$memberAvatarUrl = $this->getMemberAvatarUrl($memberId, $member['member_avatar']); $memberAvatarUrl = $this->getMemberAvatarUrl($memberId, $member['member_avatar']);
$member['memberAvatarUrl'] = $memberAvatarUrl; $member['memberAvatarUrl'] = $memberAvatarUrl;
} }
if(isset($member['member_passwd'])&&$member['member_passwd']){
unset($member['member_passwd']);
}
$memberDb0Redis->tableHMSet($memberId, $member); $memberDb0Redis->tableHMSet($memberId, $member);
} }
return $result; return $result;
......
...@@ -94,6 +94,8 @@ class CodeConfigModel { ...@@ -94,6 +94,8 @@ class CodeConfigModel {
const writeLogFailed = 10107; const writeLogFailed = 10107;
const wrongTimeForReadLog = 10108; const wrongTimeForReadLog = 10108;
const saveUserMappingFailed = 10109; const saveUserMappingFailed = 10109;
const registerMemberInfoFailed = 10110;
const authMemberExistMobile = 10111;
//访问错误 //访问错误
const illegalAccess=200001; const illegalAccess=200001;
...@@ -754,7 +756,9 @@ class CodeConfigModel { ...@@ -754,7 +756,9 @@ class CodeConfigModel {
self::emptyLog => '日志内容不能为空', self::emptyLog => '日志内容不能为空',
self::writeLogFailed => '日志写入失败', self::writeLogFailed => '日志写入失败',
self::wrongTimeForReadLog => '读日志时写入时间段查询开始时间不能大于结束时间', self::wrongTimeForReadLog => '读日志时写入时间段查询开始时间不能大于结束时间',
self::saveUserMappingFailed => '保存用户关联关系失败' self::saveUserMappingFailed => '保存用户关联关系失败',
self::registerMemberInfoFailed => '注册更新用户信息失败',
self::authMemberExistMobile => '该授权用户已经绑定手机号码'
); );
} }
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<form action="/thirdplatform/wechatAppAuth" method="post"> <form action="/thirdplatform/wechatAppAuth" method="post">
key:<input name="data[key]" value="6a620108735f413ab3e86511ff11ca99"/><br /> key:<input name="data[key]" value="6a620108735f413ab3e86511ff11ca99"/><br />
用户头像:<input name="data[code]" value=""/><br /> 小程序code:<input name="data[code]" value=""/><br />
<input type="submit" value="提交"> <input type="submit" value="提交">
</form> </form>
</body> </body>
......
...@@ -11,7 +11,7 @@ ...@@ -11,7 +11,7 @@
<form action="/user/login" method="post"> <form action="/user/login" method="post">
用户名:<input name="data[mobile]" value="18305954587"/><br /> 用户名:<input name="data[mobile]" value="18305954587"/><br />
订单id:<input name="data[password]" value="123456"/><br /> 密码:<input name="data[password]" value="123456"/><br />
key:<input name="data[key]" value="c2e5e7bfce8a727c7fb6f696bcaa23ac"/><br /> key:<input name="data[key]" value="c2e5e7bfce8a727c7fb6f696bcaa23ac"/><br />
<input type="submit" value="提交"> <input type="submit" value="提交">
</form> </form>
......
...@@ -11,10 +11,10 @@ ...@@ -11,10 +11,10 @@
<form action="/user/loginWithWechatInfo" method="post"> <form action="/user/loginWithWechatInfo" method="post">
用户头像:<input name="data[avatar]" value="https://tva3.sinaimg.cn/crop.0.1.1242.1242.180/4711809ejw8f387zus4vpj20yi0ykjwd.jpg"/><br /> 用户头像:<input name="data[avatar]" value="https://tva3.sinaimg.cn/crop.0.1.1242.1242.180/4711809ejw8f387zus4vpj20yi0ykjwd.jpg"/><br />
key:<input name="data[key]" value="f622a447ca6a6283e5bd2be7520a51f7"/><br /> key:<input name="data[key]" value="a47c3f7e20cd11d9473e39b36ce512ad"/><br />
gender:<input name="data[gender]" value="1"/><br /> gender:<input name="data[gender]" value="1"/><br />
encryptedData:<input name="data[encryptedData]" value="/jkMxPHfC/jsaa28FU58R4YQbntGmg8e259shrdBqEcdCWwyinxA2JWWWx7lH6mVJmRnkRMOGhC5SsL013r9p5hkvS+XRMqzBa0lBV8vuUdAglbMXADO0aoyErAz7OzYQ7BnKljWWstR7uMEbjPdciBxyZuImfZBpmxxXR4FktNBQxmvSdKkM8P5F5T2PIdPJeIhif+ADDLolPocSaSKzWpYgao9bvw4pLioBh2COMWqkAgFLqlnagZg4shce74FdnIqdB3m3+/Tm/XugJaJtddv8fP9oabv04hUyGWi1i1a0lT9aGiH1QfMXL0AU8mEfOR4oEcnprFLrqauKQiSe5BIO4N3C3m0H7ecgBAHQ3xgsV/a3x3rMDYi6GVAg7vQ5iHbE6tZpx54WfyZOFJQ6ei//n7wfPTd3Og6LHAKhNbKYHbrn37heUW2htOaSxjNH3TP4nbyv8bea10Pt/NlKaYpLdPJr3k5/nUqVpZjKtvOMQaLKClXqhRYSb2bptm9UB6brELy1ixxU5n9sYM1uw=="/><br /> encryptedData:<input name="data[encryptedData]" value="kXGXJHHrTjZtBCvDtKLWv/utlY5AUbbvA2wleUx94n6nUiF6mcz9AUgNziDVDXokRq855pwjGtzHwxdwg3Se7Z4bJWzkCJnC1Vk/CBd1kXHz77ct9rRyruCz27VYHMjKPzfqEmVl7MfVg+xyoXYZQoUgz98yTBlREmmIfW5gEfSTKKW73mrVoXJJvszBj3VdwaqSWiSa4whds6OZWNpgUWlFxdntY0q5nBEaKTcxPfpF3QxKlFmD4bw30Q2c41M+wTeD/txDVtqEUJf9U5rSuA0cZSzgHllTEoS4KxXunasT0WhXJ0+Uow6xDkvMvSe2az1qAmVHweKTr5mp7wAGYn5GlrcG6cXRgfctEGQg6k/rJUQMLmiurE5Z0ERLeyWUUKU1ZSlPfYgfJ5L1zLzygIudHTozCjUDHhXh0/DTaCq5ZdTEw9FYL34uZ2TsiPUEGz/VgsD/CTgvw32O9PYBjfESt8aBFk+cKxt7eJZueWyly4H7YhT5k9+TTqiQ4GY/v81BcErat/Gx8Cn/UoQh7g=="/><br />
iv:<input name="data[iv]" value="0fTG64HSN8QP6+yFlzv+9A=="/><br /> iv:<input name="data[iv]" value="yopI5yZHu+2vlaOatNyjIA=="/><br />
nickname:<input name="data[nickname]" value="lindongming123"/><br /> nickname:<input name="data[nickname]" value="lindongming123"/><br />
<input type="submit" value="提交"> <input type="submit" value="提交">
</form> </form>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment