scene('login')->validate(); // 接收数据 $user_code = $Request->input('user_code', ''); // 接收数据 $password = $Request->input('password', ''); // 查询用户 $admin = $UserModel->Where('user_code', $user_code)->first(['id', 'name', 'mobile', 'status', 'password', 'insert_time', 'update_time']); // 用户不存在 if (!$admin || $admin['status']) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 用户不存在 if ($admin['status']) return json_send(['code' => 'error', 'msg' => '该账号已停用']); // 转数组 $admin = $admin->toArray(); // 比对密码 if (md5($password) != $admin['password']) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 登录 $accessToken = $UserModel->Login($admin['id']); if (isset($accessToken['error'])) return json_send(['code' => 'error', 'msg' => '登录失败', 'data' => $accessToken['data']]); $accessToken['username'] = $admin['name']; $accessToken['is_system_admin'] = 0; // 表单令牌 return json_send(['code' => 'success', 'msg' => '登录成功', 'data' => $accessToken]); } /** * 退出方法 /api/login/out * @author 唐远望 * @version 1.0 * @date 2025-12-09 * @param string authcode 用户令牌 * */ public function out(UserModel $UserModel) { $user_info = $this->checkLogin(); // 验证规则 $uid = $user_info['uid']; // 退出登录 $UserModel->LoginOut($uid, 'api'); // 表单令牌 return json_send(['code' => 'success', 'msg' => '退出成功', 'data' => '']); } /** * 手机号码登录 /api/login/mobile * @author 唐远望 * @version 1.0 * @date 2025-12-04 * @param string mobile 手机号码 * @param string password 登录密码 * */ public function mobile(Request $Request, UserModel $UserModel) { // 验证规则 $Request->scene('mobile')->validate(); // 接收数据 $phone = $Request->input('phone', ''); // 接收数据 $password = $Request->input('password', ''); // 查询用户 $user_info = $UserModel->where('mobile', $phone)->first(['id', 'name', 'mobile', 'status', 'password', 'insert_time', 'update_time']); // 用户不存在 if (!$user_info || $user_info['status']) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 用户不存在 if ($user_info['status']) return json_send(['code' => 'error', 'msg' => '该账号已停用']); // 转数组 $user_info = $user_info->toArray(); // 比对密码 if (md5($password) != $user_info['password']) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 登录 $accessToken = $UserModel->Login($user_info['id']); if (isset($accessToken['error'])) return json_send(['code' => 'error', 'msg' => '登录失败', 'data' => $accessToken['data']]); $accessToken['username'] = $user_info['name']; $accessToken['is_system_admin'] = 0; // 表单令牌 return json_send(['code' => 'success', 'msg' => '登录成功', 'data' => $accessToken]); } /** * 发送短信验证码 * @author 唐远望 * @version 1.0 * @date 2026-01-16 * @param string phone 手机号码 * */ public function send_sms_code(Request $Request, UserModel $UserModel) { // 验证规则 $Request->scene('send_code')->validate(); // 接收数据 $mobile = request('phone', ''); if (!$mobile) return json_send(['code' => 'error', 'msg' => '请先填写手机号']); // 获取数据 $session = Cache::get('loginSmsCode_' . $mobile); // 如果有数据,并且验证码创建的时间在一分钟之内 if ($session && time() - $session['create_time'] < 60) return json_send(['code' => 'error', 'msg' => '请稍后再试']); // 查询用户 $admin = $UserModel->query()->where('mobile', $mobile)->first(['status']); if ($admin && $admin['status']) return json_send(['code' => 'error', 'msg' => '用户已被停用']); $code = strval(rand(100000, 999999)); $result = Sms::sendCode($mobile, $code); if (isset($result['error'])) return json_send(['code' => 'error', 'msg' => $result['error']]); $session = ['code' => $code, 'mobile' => $mobile, 'create_time' => time()]; Cache::put('loginSmsCode_' . $mobile, $session, 120); return json_send(['code' => 'success', 'msg' => '发送成功', 'data' => '']); } /** * 发送邮箱验证码 * @author 唐远望 * @version 1.0 * @date 2026-01-16 * @param string email 邮箱号码 * */ public function send_email_code(Request $Request, UserModel $UserModel){ // 验证规则 $Request->scene('send_email_code')->validate(); // 接收数据 $email = request('email', ''); if (!$email) return json_send(['code' => 'error', 'msg' => '请先填写邮箱']); // 获取数据 $session = Cache::get('loginEmailCode_' . $email); // 如果有数据,并且验证码创建的时间在一分钟之内 if ($session && time() - $session['create_time'] < 60) return json_send(['code' => 'error', 'msg' => '请稍后再试']); // 查询用户 $admin = $UserModel->query()->where('email', $email)->first(['status']); if ($admin && $admin['status']) return json_send(['code' => 'error', 'msg' => '用户已被停用']); $code = strval(rand(100000, 999999)); $subject = '验证码'; $body = '您的验证码是:' . $code . ',2分钟内有效,请勿外泄。'; $result = Email::sendSmtpEmail($email, $subject, $body); if (isset($result['error'])) return json_send(['code' => 'error', 'msg' => $result['error']]); $session = ['code' => $code, 'email' => $email, 'create_time' => time()]; Cache::put('loginEmailCode_' . $email, $session, 120); return json_send(['code' => 'success', 'msg' => '发送成功', 'data' => '']); } /** * 邮箱登录 /api/login/email * @author 唐远望 * @version 1.0 * @date 2026-01-16 * @param string email 邮箱号码 * @param string password 登录密码 * */ public function email(Request $Request, UserModel $UserModel) { // 验证规则 $Request->scene('email')->validate(); // 接收数据 $email = $Request->input('email', ''); // 接收数据 $password = $Request->input('password', ''); // 查询用户 $admin = $UserModel->where('email', $email)->first(['id', 'name', 'mobile', 'status', 'password', 'insert_time', 'update_time']); // 用户不存在 if (!$admin) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 用户不存在 if ($admin['status']) return json_send(['code' => 'error', 'msg' => '该账号已停用']); // 转数组 $admin = $admin->toArray(); // 比对密码 if (md5($password) != $admin['password']) return json_send(['code' => 'error', 'msg' => '密码错误或账号不存在']); // 登录 $accessToken = $UserModel->Login($admin['id']); if (isset($accessToken['error'])) return json_send(['code' => 'error', 'msg' => '登录失败', 'data' => $accessToken['data']]); $accessToken['username'] = $admin['name']; $accessToken['is_system_admin'] = 0; // 表单令牌 return json_send(['code' => 'success', 'msg' => '登录成功', 'data' => $accessToken]); } /** * 邮箱注册 * @author 唐远望 * @version 1.0 * @date 2026-01-16 * @param string email 邮箱号码 * */ public function email_register(Request $Request, UserModel $UserModel) { // 验证规则 $Request->scene('email_register')->validate(); // 接收数据 $code = request('code', ''); $email = $Request->input('email', ''); $password = $Request->input('password', ''); $name = $Request->input('name', ''); $mobile = $Request->input('mobile', ''); $session = Cache::get('loginEmailCode_' . $email); if (!$session) return json_send(['code' => 'error', 'msg' => '请先获取邮箱验证码验证码']); if ($session['code'] != $code || $session['email'] != $email) return json_send(['code' => 'error', 'msg' => '邮箱验证码错误']); // 查询用户 $admin = $UserModel->where('email', $email)->first(['id']); // 用户已存在 if ($admin) return json_send(['code' => 'error', 'msg' => '该邮箱已注册']); // 注册用户 $data = [ 'name' => $name, 'mobile' => $mobile, 'email' => $email, 'password' => md5($password), 'status' => 0, 'insert_time' => time(), 'update_time' => time(), ]; $user_id = $UserModel->insertGetId($data); if (!$user_id) return json_send(['code' => 'error', 'msg' => '注册失败']); $UserModel->where('id', $user_id)->update(['user_code' => 'LY'. $user_id]); // 登录 $accessToken = $UserModel->Login($UserModel->id); if (isset($accessToken['error'])) return json_send(['code' => 'error', 'msg' => '登录失败', 'data' => $accessToken['data']]); $accessToken['username'] = $name; $accessToken['is_system_admin'] = 0; // 表单令牌 return json_send(['code' => 'success', 'msg' => '注册成功', 'data' => $accessToken]); } /** * 手机验证码登录 /api/login/mobile_code * @author 唐远望 * @version 1.0 * @date 2026-01-16 * @param string mobile 手机号码 * @param string code 验证码 * */ public function mobile_code(Request $Request, UserModel $UserModel) { // 验证规则 $Request->scene('mobile_code')->validate(); // 接收数据 $phone = $Request->input('phone', ''); // 接收数据 $code = $Request->input('code', ''); // 获取数据 $session = Cache::get('loginSmsCode_' . $phone); if (!$session) return json_send(['code' => 'error', 'msg' => '请先获取手机号验证码']); if ($session['code'] != $code || $session['mobile'] != $phone) return json_send(['code' => 'error', 'msg' => '验证码错误']); // 查询用户 $admin = $UserModel->where('mobile', $phone)->first(['company_id', 'id', 'name', 'mobile', 'status', 'password', 'insert_time', 'update_time']); // 用户不存在 if (!$admin) return json_send(['code' => 'error', 'msg' => '账号不存在']); // 用户不存在 if ($admin['status']) return json_send(['code' => 'error', 'msg' => '该账号已停用']); // 转数组 $admin = $admin->toArray(); // 登录 $accessToken = $UserModel->Login($admin['id']); if (isset($accessToken['error'])) return json_send(['code' => 'error', 'msg' => '登录失败', 'data' => $accessToken['data']]); $accessToken['username'] = $admin['name']; $accessToken['is_system_admin'] = 0; // 表单令牌 return json_send(['code' => 'success', 'msg' => '登录成功', 'data' => $accessToken]); } }