request->isPost()) { $data = $this->request->post(); $type = $data['type'] ?? 'account'; // 注册类型:account-账号密码,phone-手机号,wechat-微信 try { switch ($type) { case 'account': // 账号密码注册 $validate = validate([ 'username' => 'require|min:3|max:20|unique:user', 'password' => 'require|min:6|max:20', 'confirm_password' => 'require|confirm:password' ], [ 'username.require' => '用户名不能为空', 'username.min' => '用户名长度不能小于3个字符', 'username.max' => '用户名长度不能超过20个字符', 'username.unique' => '用户名已存在', 'password.require' => '密码不能为空', 'password.min' => '密码长度不能小于6个字符', 'password.max' => '密码长度不能超过20个字符', 'confirm_password.require' => '确认密码不能为空', 'confirm_password.confirm' => '两次输入的密码不一致' ]); if (!$validate->check($data)) { return json(['code' => 0, 'msg' => $validate->getError()]); } $user = new UserModel; $user->username = $data['username']; $user->password = password_hash($data['password'], PASSWORD_DEFAULT); $user->create_time = time(); $user->save(); return json(['code' => 1, 'msg' => '注册成功']); case 'phone': // 手机号注册 $validate = validate([ 'phone' => 'require|mobile|unique:user', 'code' => 'require|number|length:6' ], [ 'phone.require' => '手机号不能为空', 'phone.mobile' => '手机号格式不正确', 'phone.unique' => '该手机号已注册', 'code.require' => '验证码不能为空', 'code.number' => '验证码必须为数字', 'code.length' => '验证码长度必须为6位' ]); if (!$validate->check($data)) { return json(['code' => 0, 'msg' => $validate->getError()]); } // 验证短信验证码 $smsCode = cache('sms_code_' . $data['phone']); if (!$smsCode || $smsCode != $data['code']) { return json(['code' => 0, 'msg' => '验证码错误或已过期']); } $user = new UserModel; $user->phone = $data['phone']; $user->create_time = time(); $user->save(); // 清除验证码缓存 cache('sms_code_' . $data['phone'], null); return json(['code' => 1, 'msg' => '注册成功']); case 'wechat': // 微信注册 $validate = validate([ 'openid' => 'require|unique:user' ], [ 'openid.require' => '微信授权失败', 'openid.unique' => '该微信账号已注册' ]); if (!$validate->check($data)) { return json(['code' => 0, 'msg' => $validate->getError()]); } $user = new UserModel; $user->openid = $data['openid']; $user->nickname = $data['nickname'] ?? ''; $user->avatar = $data['avatar'] ?? ''; $user->create_time = time(); $user->save(); return json(['code' => 1, 'msg' => '注册成功']); default: return json(['code' => 0, 'msg' => '注册类型错误']); } } catch (\Exception $e) { return json(['code' => 0, 'msg' => '注册失败:' . $e->getMessage()]); } } return $this->fetch(); } /** * 退出登录 * * @return \think\Response */ public function logout() { // 增加日志记录,记录用户退出登录操作 Log::record('用户退出登录', 'info'); // 销毁当前会话中的所有数据 session(null); // 清除缓存中的用户信息 Cache::tag('user_cache')->clear(); return redirect('login'); } // 发送短信验证码 public function sendSmsCode() { if ($this->request->isPost()) { $phone = $this->request->post('phone'); // 验证手机号 $validate = validate([ 'phone' => 'require|mobile|unique:user' ], [ 'phone.require' => '手机号不能为空', 'phone.mobile' => '手机号格式不正确', 'phone.unique' => '该手机号已注册' ]); if (!$validate->check(['phone' => $phone])) { return json(['code' => 0, 'msg' => $validate->getError()]); } // 生成6位随机验证码 $code = mt_rand(100000, 999999); // 这里应该调用短信服务商API发送验证码 // 示例代码,实际使用时需要替换为真实的短信发送逻辑 try { // TODO: 调用短信服务商API发送验证码 // $result = sendSms($phone, $code); // 将验证码保存到缓存,有效期5分钟 cache('sms_code_' . $phone, $code, 300); return json(['code' => 1, 'msg' => '验证码发送成功']); } catch (\Exception $e) { return json(['code' => 0, 'msg' => '验证码发送失败:' . $e->getMessage()]); } } return json(['code' => 0, 'msg' => '非法请求']); } // 微信授权回调 public function wechatCallback() { $code = $this->request->get('code'); if (!$code) { return json(['code' => 0, 'msg' => '微信授权失败']); } try { // 这里应该调用微信API获取用户信息 // 示例代码,实际使用时需要替换为真实的微信API调用逻辑 // $wechatUser = getWechatUserInfo($code); // 模拟获取到的微信用户信息 $wechatUser = [ 'openid' => 'test_openid_' . time(), 'nickname' => '微信用户', 'avatar' => '' ]; // 检查用户是否已注册 $user = UserModel::where('openid', $wechatUser['openid'])->find(); if ($user) { // 已注册,直接登录 session('user_id', $user->id); return json(['code' => 1, 'msg' => '登录成功']); } // 未注册,返回注册所需信息 return json([ 'code' => 2, 'msg' => '需要注册', 'data' => $wechatUser ]); } catch (\Exception $e) { return json(['code' => 0, 'msg' => '微信授权失败:' . $e->getMessage()]); } } }