where('status', 0) ->where('email', $request->post('email')) ->first(); if (!$user) { return Util::fail(['user' => $user], trans('user_none')); } $user = $user->toArray(); $userPassword = $user['password']; //加密 $hashedPassword = password_hash($password, PASSWORD_DEFAULT); //验证密码 // if (!password_verify($userPassword, $hashedPassword)) { if ($userPassword == $hashedPassword) { locale($language); return Util::fail([], trans('password_error')); } $userId = $user['id']; // 实际从数据库获取 Redis::set('user_' . $userId, $user); //密码验证成功后加密生成 Token $token = JwtUtil::generateToken($userId); $result = $user; unset($result['password']); $result['token'] = $token; $result['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id'); if (!Util::isEmpty($language)) { User::where('id', $userId) ->update(['language' => $language]); locale($language); } return Util::success($result, trans('login_success')); } /** * 发送邮箱验证码 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function sendCode(Request $request) { $email = Util::getParam($request, 'email'); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return Util::fail([], trans('email_error')); } // 生成验证码 $code = str_pad(random_int(0, 999999), 6, '0', STR_PAD_LEFT); // $verification_code = Redis::get("verification_code:{$email}"); // $code = $verification_code?:$code; // return Util::success($code, '验证码已发送'); // 发送邮件 $mailService = new MailService(); if ($mailService->sendVerificationCode($email, $code)) { // 存储验证码到 Redis Redis::set("verification_code:{$email}", $code, 300); return Util::success([], '验证码已发送'); } return Util::fail([], '邮件发送失败'); } /** * 注册 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function register(Request $request) { $email = Util::getParam($request, 'email', 'asdf'); $code = Util::getParam($request, 'code'); $sex = Util::getParam($request, 'sex', 0); $name = Util::getParam($request, 'name', ''); $password = Util::getParam($request, 'password'); $mobile = Util::getParam($request, 'mobile'); $id = Util::getParam($request, 'id'); $language = Util::getParam($request, 'language'); if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { return Util::fail([], trans('required_not_null')); } $res = User::select('id', 'email') ->where('email', $email) ->first(); if (!empty($res)) { return Util::fail($res, trans('email_repeat')); } if (Util::isEmpty($name)) { // return Util::fail([], trans('required_not_null')); } $verification_code = Redis::get("verification_code:{$email}"); if ($code != $verification_code) { return Util::fail([], trans('code_error')); } if(strlen($password) < 6) { return Util::fail([], trans('password_short')); } //加密 $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $data = [ 'mobile' => $mobile, 'email' => $email, 'name' => '用户_'.rand(111111, 999999), 'sex' => $sex, 'role' => 1, 'password' => $hashedPassword, 'status' => 0, 'avatar' => 'lingke_crm/logo.png' ]; if (Util::isEmpty($id)) { $option = ['email' => $email]; $userService = new UserService; $res = $userService->createOrquery($option); Log::info('register_rpc',$res); // return Util::fail($res, trans('register_fail')); if ($res['code'] != 200 && $res['data']['code'] != 0){ return Util::fail($res, trans('register_fail')); } $data['sn'] = $res['data']['data']['sn']; $data['id'] = $res['data']['data']['uid']; $res = User::firstOrCreate(['sn' => $data['sn']],$data); $res['id'] = $data['id']; } else { $res = User::where('id', $id) ->update($data); // Log::info('update', ['res' => $res]); (!$res) ?: $res = User::find($id)->toArray(); } unset($res['password']); locale($language); if ($res) { return Util::success($res, trans('register_success')); } else { return Util::fail($res, trans('register_fail')); } } public function getInfo(Request $request) { $userId = $request->user['id']; $user = User::where('id', $userId) ->first(); $user->toArray(); unset($user->password); $user['feishu_openid'] = FeishuUser::where('user_id', $userId)->value('open_id'); $user['country_name'] = Country::where('id', $user['country_id'])->value('cn_addr'); $user['avatar_url'] = $user['avatar']; $user['socialize_pic_url'] = $user['socialize_pic']; $ossservice = new \app\service\OssService(); $user['avatar'] = $user['avatar'] ? $ossservice->generatePrivateUrl($user['avatar']) : ''; $user['socialize_pic'] = $user['socialize_pic'] ? $ossservice->generatePrivateUrl($user['socialize_pic']) : ''; // 重构数组 $sign = array_column(Constants::SIGN, 'name', 'id'); $user['company'] = $sign[$user['sign']]; return Util::success($user, trans('success')); } /** * 修改 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function save(Request $request) { $id = $request->user['id']; $avatar = Util::getParam($request, 'avatar'); $socializePic = Util::getParam($request, 'socialize_pic'); $user = User::where('id', $id)->first(); // 只填充前端传递的字段 $user->fill($request->only(['name', 'sex', 'position', 'country_id', 'sign', 'mobile', 'address', 'socialize', 'socialize_pic'])); if(!Util::isEmpty($avatar)){ $user->avatar = $avatar; } if(!Util::isEmpty($socializePic)){ $user->socialize_pic = $socializePic; } $mobile = $user->isDirty('mobile'); $name = $user->isDirty('name'); $sign = $user->isDirty('sign'); if($mobile || $name || $sign){ $userService = new UserService; $option = ['uid' => $user->id, 'phone' => $user->mobile, 'name' => $user->name, 'sign' => $user->sign, ]; $res = $userService->update($option); Log::info('register_rpc',$res); } $res = $user->save(); if ($res) { return Util::success($res, trans('save_success')); } else { return Util::fail($res, trans('save_fail')); } } /** * 修改 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function savePassword(Request $request) { $password = Util::getParam($request, 'password'); $email = Util::getParam($request, 'email'); $code = Util::getParam($request, 'code'); $verification_code = Redis::get("verification_code:{$email}"); $id = $request->user['id']; if ($code != $verification_code) { return Util::fail([], trans('code_error')); } $res = User::where('id', $id) ->first(); if($res['email'] != $email) { return Util::fail([], trans('email_consistent')); } //加密 // $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $data = [ 'password' => $hashedPassword ]; $res = User::where('id', $id) ->update($data); if ($res) { return Util::success($res, trans('save_success')); } else { return Util::fail($res, trans('save_fail')); } } /** * 注册 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function language(Request $request) { $id = $request->user['id']; $language = Util::getParam($request, 'language'); if (Util::isEmpty($language)) { return Util::fail([], 'language' . trans('not_null')); } if (!in_array($language, ['en', 'zh_CN'])) { return Util::fail([], trans('param_error')); } $data = [ 'language' => $language, ]; $res = User::where('id', $id) ->update($data); locale($language); if ($res) { return Util::success(null, trans('language_success')); } else { return Util::fail(null, trans('language_fail')); } } }