| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- <?php
- namespace app\api\model\user;
- use app\common\model\user\Grade as GradeModel;
- use app\common\model\user\Sms as SmsModel;
- use think\facade\Cache;
- use app\common\model\user\User as UserModel;
- /**
- * 用户模型类
- */
- class UserWeb extends UserModel
- {
- private $token;
- /**
- * 隐藏字段
- */
- protected $hidden = [
- 'open_id',
- 'is_delete',
- 'app_id',
- 'create_time',
- 'update_time'
- ];
- /**
- * 用户登录
- */
- public function login($data)
- {
- if(!$this->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}");
- }
- }
|