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('required_not_null')); } // 生成验证码 $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 (!Util::isEmpty($res)) { // return Util::fail([], 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')); } //加密 $hashedPassword = password_hash($password, PASSWORD_DEFAULT); $data = [ 'mobile' => $mobile, 'email' => $email, 'name' => $name, 'sex' => $sex, 'role' => 1, 'password' => $hashedPassword, 'status' => 0, ]; if (Util::isEmpty($id)) { $res = User::create($data); } 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'); return Util::success($user, trans('save_success')); } /** * 修改 * @param Request $request * @return \support\Response * @throws \Random\RandomException */ public function save(Request $request) { $name = Util::getParam($request, 'name'); $sex = Util::getParam($request, 'sex'); $position = Util::getParam($request, 'position'); $country_id = Util::getParam($request, 'country_id'); $sign = Util::getParam($request, 'sign'); $id = $request->user['id']; $data = [ 'name' => $name, 'sex' => $sex, 'position' => $position, 'country_id' => $country_id, 'sign' => $sign, ]; $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 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')); } } }