check($data)){ return false; } $user = $this->where('mobile', '=', $data['mobile'])->find(); if(!$user){ $this->save([ 'mobile' => $data['mobile'], 'reg_source' => 'h5', //默认等级 'grade_id' => GradeModel::getDefaultGradeId(), 'app_id' => self::$app_id ]); $user_id = $this['user_id']; $mobile = $data['mobile']; }else{ $user_id = $user['user_id']; $mobile = $user['mobile']; } // 生成token (session3rd) $this->token = $this->token($mobile); // 记录缓存, 30天 Cache::tag('cache')->set($this->token, $user_id, 86400 * 30); return $user_id; } /** * 验证 */ private function check($data) { //判断验证码是否过期、是否正确 $sms_model = new SmsModel(); $sms_record_list = $sms_model ->where('mobile', '=', $data['mobile']) ->order(['create_time' => 'desc']) ->limit(1)->select(); if(count($sms_record_list) == 0){ $this->error = '未查到短信发送记录'; return false; } $sms_model = $sms_record_list[0]; if((time() - strtotime($sms_model['create_time']))/60 > 30){ $this->error = '短信验证码超时'; return false; } if($sms_model['code'] != $data['code']){ $this->error = '验证码不正确'; return false; } return true; } /** * 绑定手机 */ public function bindMobile($user, $data){ if(!$this->check($data)){ return false; } return $user->save([ 'mobile' => $data['mobile'] ]); } /** * 获取token */ public function getToken() { return $this->token; } /** * 生成用户认证的token */ private function token($openid) { $app_id = self::$app_id; // 生成一个不会重复的随机字符串 $guid = \getGuidV4(); // 当前时间戳 (精确到毫秒) $timeStamp = microtime(true); // 自定义一个盐 $salt = 'token_salt'; return md5("{$app_id}_{$timeStamp}_{$openid}_{$guid}_{$salt}"); } }