123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470 |
- <?php
- /**
- * 用户身份认证相关操作
- */
- //use Shopnc\Tpl;
- defined('InShopNC') or exit('Access Invalid!');
- require_once(BASE_DATA_PATH . '/model/member.model.php');
- require_once(BASE_CORE_PATH . '/framework/libraries/sms.php');
- require_once(BASE_CORE_PATH . '/framework/function/core.php');
- class loginControl extends mobileHomeControl
- {
- const token_expire = 600;
- const code_expire = 5;
- public function __construct()
- {
- parent::__construct();
- }
- /**
- * 登录
- */
- public function indexOp()
- {
- if (!in_array($_POST['client'], $this->client_type_array)) {
- return joutput_error(errcode::ErrApptype);
- }
- $type = trim($_POST['type']);
- if (!isset($type) || !in_array($type, $this->client_login_type_array)) {
- return joutput_error(errcode::ErrParamter, 'type error.');
- }
- $validate = new Validate();
- if ($type == memberModel::mobile_login) {
- $openid = trim($_POST['mobile']);
- $password = trim($_POST['password']);
- $validate->setValidate(Validate::verify_mobile($openid));
- $validate->setValidate(Validate::verify_password($password));
- } else {
- $openid = trim($_POST['openid']);
- $validate->setValidate(Validate::verify_openid($openid));
- }
- $error = $validate->validate();
- if ($error != '') {
- return joutput_error(errcode::ErrParamter, $error);
- }
- $model_member = Model('member');
- $userid = $model_member->getMemberID($openid, $type, $password);
- if ($userid == -1) {
- return joutput_error(errcode::ErrLogin, "用户名或密码错误");
- } else {
- $key = memberModel::gen_uid_token($userid);
- $ret = rcache($key, 'member');
- if (empty($ret)) {
- $token = $this->_get_token($userid, $openid, 'lrlz');
- wcache($key, array('token' => $token), 'member', self::token_expire);
- $key_token_uid = memberModel::gen_token_uid($token);
- wcache($key_token_uid, array('userid' => $userid), 'member', self::token_expire);
- $ret['cache_expiration_time'] = TIMESTAMP + self::token_expire * 60;
- $ret['token'] = $token;
- }
- $ret['systime'] = TIMESTAMP;
- joutput_data($ret);
- }
- }
- /**
- * 注销
- */
- public function logoutOp()
- {
- $token = trim($_POST['token']);
- if (empty($token)) {
- return joutput_error(errcode::ErrParamter, 'Token cannot empty.');
- }
- $userid = token_uid($token);
- if ($userid == -1) {
- return joutput_error(errcode::ErrTokenExpire);
- }
- $uid_token = memberModel::gen_uid_token($userid);
- $token_uid = memberModel::gen_token_uid($token);
- dcache($uid_token, 'member');
- dcache($token_uid, 'member');
- }
- public function genuserOp()
- {
- if (!in_array($_POST['client'], $this->client_type_array)) {
- return joutput_error(errcode::ErrApptype);
- }
- $type = $_POST['type'];
- if (!isset($type) || !in_array($type, $this->client_login_type_array)) {
- return joutput_error(errcode::ErrParamter, 'type error.');
- }
- $validator = new Validate();
- if ($type == memberModel::anonymous_login) {
- $info = $_POST['info'];
- if (!empty($info)) {
- $openid = md5(uniqid(mt_rand(), true));
- }
- $validator->setValidate(Validate::notnull($info));
- } elseif ($type == memberModel::wxopen_login) {
- $openid = $_POST['openid'];
- $validator->setValidate(Validate::verify_openid($openid));
- } else {
- return joutput_error(errcode::ErrUsertype, '错误的获取用户类型,目前只支持匿名获取和微信公众号获取身份.');
- }
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- $model_member = Model('member');
- $userid = $model_member->getMemberID($openid, $type);
- if ($userid == -1) {
- $baseinfo = array();
- if ($type == memberModel::anonymous_login) {
- $baseinfo['anonymous_id'] = $openid;
- $baseinfo['member_name'] = 'anonymous';
- $baseinfo['member_type'] = memberModel::anonymous_login;
- } elseif ($type == memberModel::wxopen_login) {
- $baseinfo['member_wxopenid'] = $openid;
- $baseinfo['member_name'] = 'wxuser';
- $baseinfo['member_type'] = memberModel::wxopen_login;
- } else {
- //不会走到这儿,
- }
- $ret = $model_member->addMember($baseinfo);
- if ($ret != false) {
- return joutput_data(array('userid' => $openid));
- } else {
- return joutput_error(errcode::ErrorDB, '插入数据库错误.');
- }
- } else {
- return joutput_data(array('userid' => $openid));
- }
- }
- public function bindOp()
- {
- static $bind_types = array('mobile', 'wx', 'mobilenewpassword');
- $type = trim($_POST['type']);
- if (!isset($type) || !in_array($type, $bind_types)) {
- return joutput_error(errcode::ErrParamter, 'Bind type error,only support mobile and wx.');
- }
- $token = trim($_POST['token']);
- if (empty($token)) {
- return joutput_error(errcode::ErrParamter, 'Token cannot empty.');
- }
- $userid = token_uid($token);
- if ($userid == -1) {
- return joutput_error(errcode::ErrTokenExpire);
- }
- $validator = new Validate();
- $data = array();
- if ($type == 'mobile' || $type == 'mobilenewpassword') {
- $code = trim($_POST['code']);
- $password = trim($_POST['password']);
- $validator->setValidate(Validate::smscode($code));
- $validator->setValidate(Validate::verify_password($password));
- $data['member_passwd'] = md5($password);
- } elseif ($type == 'wx') {
- $openid = trim($_POST['openid']);
- $data['member_wxopenid'] = $openid;
- $validator->setValidate(Validate::verify_openid($openid));
- $cond = array('member_wxopenid' => $openid);
- } else {
- return;
- }
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- if ($type == 'mobile') {
- $key = $this->gen_token_code($token);
- $ret = rcache($key, 'member');
- if (!empty($ret) && $ret['code'] == $code) {
- $mobile = $ret['mobile'];
- $cond = array('member_mobile' => $mobile);
- $data['member_mobile'] = $mobile;
- $data['member_type'] = 0;
- } else {
- return false;
- }
- } elseif ($type == 'mobilenewpassword') {
- $key = $this->gen_token_code($token);
- $ret = rcache($key, 'member');
- if (!empty($ret) && $ret['code'] == $code) {
- $mobile = $ret['mobile'];
- $cond = array('member_mobile' => $mobile);
- $data['member_type'] = 0;
- } else {
- return false;
- }
- }
- $model = Model('member');
- $ret = $model->where($cond)->find();
- if (empty(ret) || count($ret) == 0) {
- $model->where(array('member_id' => $userid))->update($data);
- dcache($userid, 'member');
- joutput_data(NULL);
- } elseif ($type == 'mobilenewpassword') {
- $model->where($cond)->update($data);
- joutput_data(NULL);
- } else {
- return joutput_error(errcode::ErrIDbinded);
- }
- }
- public function registerOp()
- {
- $mobile = trim($_POST['mobile']);
- $password = trim($_POST['password']);
- $code = trim($_POST['code']);
- $validator = new Validate();
- $validator->setValidate(Validate::verify_mobile($mobile));
- $validator->setValidate(Validate::verify_password($password));
- $validator->setValidate(Validate::smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- $model = Model('member');
- $ret = $model->where(array('member_mobile' => $mobile))->find();
- if (!empty($ret)) {
- return joutput_error(errcode::ErrUserExisted, "用户已经存在.");
- } else {
- $key = self::gen_mobile_code($mobile);
- $ret = rcache($key, 'member');
- if (!empty($ret) && $ret['code'] == $code) {
- $success = $model->insert(array('member_mobile' => $mobile, 'member_type' => 0, 'member_passwd' => md5($password)));
- if ($success) {
- return joutput_data(NULL);
- } else {
- return joutput_error(errcode::ErrDB, "DB error.");
- }
- } else {
- return joutput_error(errcode::ErrSmscode, "错误的验证码.");
- }
- }
- }
- public function resetpassOp()
- {
- $mobile = trim($_POST['mobile']);
- $password = trim($_POST['password']);
- $code = trim($_POST['code']);
- $validator = new Validate();
- $validator->setValidate(Validate::verify_mobile($mobile));
- $validator->setValidate(Validate::verify_password($password));
- $validator->setValidate(Validate::smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- $model = Model('member');
- $member_info = $model->where(array('member_mobile' => $mobile))->find();
- if (empty($member_info) || count($member_info) == 0) {
- return joutput_error(errcode::ErrUserExisted, "用户不存在.");
- } else {
- $key = self::gen_mobile_code($mobile);
- $ret = rcache($key, 'member');
- if (!empty($ret) && $ret['code'] == $code) {
- $success = $model->where(array('member_mobile' => $mobile))->update(array('member_type' => 0, 'member_passwd' => md5($password)));
- if ($success) {
- $key = $this->gen_openid_uid($mobile, 0);
- dcache($key, 'member');
- return joutput_data(NULL);
- } else {
- return joutput_error(errcode::ErrDB, "DB error.");
- }
- } else {
- return joutput_error(errcode::ErrSmscode, "错误的验证码.");
- }
- }
- }
- public function getinfoOp()
- {
- static $field = 'member_id,member_mobile,member_name,member_truename,member_avatar,member_sex,member_birthday,member_email,member_email_bind';
- $token = trim($_POST['token']);
- if (empty($token)) {
- return joutput_error(errcode::ErrParamter, 'Token cannot empty.');
- }
- $userid = token_uid($token);
- if ($userid == -1) {
- return joutput_error(errcode::ErrTokenExpire);
- } else {
- $conditions = array('member_id' => $userid);
- $model = Model('member');
- $info = $model->getMemberInfoByID($userid, $field);
- joutput_data($info);
- }
- }
- /**
- * 登录生成token
- */
- private function _get_token($member_id, $member_name, $client)
- {
- $model_mb_user_token = Model('mb_user_token');
- //重新登录后以前的令牌失效
- //暂时停用
- //$condition = array();
- //$condition['member_id'] = $member_id;
- //$condition['client_type'] = $_POST['client'];
- //$model_mb_user_token->delMbUserToken($condition);
- //生成新的token
- $mb_user_token_info = array();
- $token = md5($member_name . strval(TIMESTAMP) . strval(rand(0, 999999)));
- $mb_user_token_info['member_id'] = $member_id;
- $mb_user_token_info['member_name'] = $member_name;
- $mb_user_token_info['token'] = $token;
- $mb_user_token_info['login_time'] = TIMESTAMP;
- $mb_user_token_info['client_type'] = $_POST['client'];
- $result = $model_mb_user_token->addMbUserToken($mb_user_token_info);
- if ($result) {
- return $token;
- } else {
- return NULL;
- }
- }
- public static function gen_openid_uid($openid, $type)
- {
- $key = 'openid_uid:' . $openid . ':' . $type;
- return $key;
- }
- public static function gen_token_code($token)
- {
- $key = 'token_code:' . $token;
- return $key;
- }
- public static function gen_mobile_code($mobile)
- {
- $key = 'mobile:' . $mobile;
- return $key;
- }
- public function getcodeOp()
- {
- static $types = array('register', 'resetpass', 'getbonus');
- $mobile = trim($_POST['mobile']);
- $type = trim($_POST['type']);
- $validator = new Validate();
- $validator->setValidate(Validate::verify_mobile($mobile));
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- if (!in_array($type, $types)) {
- return joutput_error(errcode::ErrParamter, "错误的类型参数: type={$type}");
- }
- if ($type == 'register') {
- $itype = Sms::register_code;
- } elseif ($type == 'resetpass') {
- $itype = Sms::resetpass_code;
- } elseif ($type == 'getbonus') {
- $itype = Sms::bonus_code;
- }
- $itype = Sms::register_code;
- $sms = new Sms();
- $code = makeSmscode();
- $status = $sms->send($mobile, array('code' => $code, 'type' => $itype, 'time' => '5'));
- if ($status == 0) {
- $key = $this->gen_mobile_code($mobile);
- $ret = wcache($key, array('code' => $code, 'mobile' => $mobile), 'member', self::code_expire);
- joutput_data(NULL);
- } else {
- return joutput_error(errcode::ErrSms, "send error={$status}.");
- }
- }
- public function checkcodeOp()
- {
- $token = trim($_POST['token']);
- if (empty($token)) {
- return joutput_error(errcode::ErrParamter, 'Token cannot empty.');
- }
- $userid = token_uid($token);
- if ($userid == -1) {
- return joutput_error(errcode::ErrTokenExpire);
- }
- $validator = new Validate();
- $code = trim($_POST['code']);
- $validator->setValidate(Validate::smscode($code));
- $err = $validator->validate();
- if ($err != '') {
- return joutput_error(errcode::ErrParamter, $err);
- }
- $key = $this->gen_token_code($token);
- $ret = rcache($key, 'member');
- if (empty($ret)) {
- return joutput_error(errcode::ErrSmscodeExpire);
- } elseif ($ret['code'] == $code) {
- joutput_data(NULL);
- } else {
- return joutput_error(errcode::ErrSmscode);
- }
- }
- // public function registerOp()
- // {
- // $model_member = Model('member');
- //
- // $register_info = array();
- // $register_info['username'] = $_POST['username'];
- // $register_info['password'] = $_POST['password'];
- // $register_info['password_confirm'] = $_POST['password_confirm'];
- //
- // $register_info['checkcode'] = $_POST['password_confirm'];
- // $register_info['email'] = $_POST['email'];
- //
- // $member_info = $model_member->register($register_info);
- // if (!isset($member_info['error'])) {
- // $token = $this->_get_token($member_info['member_id'], $member_info['member_name'], $_POST['client']);
- // if ($token) {
- // output_data(array('username' => $member_info['member_name'], 'key' => $token));
- // } else {
- // output_error('注册失败');
- // }
- // } else {
- // output_error($member_info['error']);
- // }
- // }
- }
|