From b9150c3e29853fd09c79c1469dc8f13e71f878da Mon Sep 17 00:00:00 2001 From: jayhgq Date: Tue, 28 Apr 2026 17:51:58 +0800 Subject: [PATCH] =?UTF-8?q?fix(auth):=20=E6=B7=BB=E5=8A=A0=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E7=94=9F=E6=88=90=E5=BC=82=E5=B8=B8=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 捕获验证码生成过程中的异常并抛出HTTP异常,提高系统健壮性 --- .../utils/__pycache__/captcha.cpython-313.pyc | Bin 3461 -> 3704 bytes backend/auth/utils/captcha.py | 24 ++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/backend/auth/utils/__pycache__/captcha.cpython-313.pyc b/backend/auth/utils/__pycache__/captcha.cpython-313.pyc index 0596e2c2cd5dc70383e6461c6776330b79467fbc..b75f4cb72ea1ec8c77c7bff76276f0fc75a40c68 100644 GIT binary patch delta 1114 zcmZ8gO=ufO6rR!UtX5iiCCid)S+Zl%`e%jX5ZR>Iq;A|a5aKwbnb3aY zSE21CxRByNN^Pdl7E0nn3rZ;@B|Rmlrj%ZKuy9Mml0pw{er^g*z_gdX*`%?_z`lL+ z&G)|j-puU9^j1dS?CJ_57`YES_Lremy$@GbN8g=9RGHV0L|JqQ(F6^eF{+x~X58$V z3J_pV$u!iD&dO&oOVA_@o7#yS@0NN7G&4>k@N}86DV6HaIlV72RA7+ZLC{fXRB+fU z+l(I20R5Pc_if{8p$#6uNeZ;%{(Aq8^_Ly?_>A;vV)XKl@O-y{y{^M2PaZ$?Udd{> zcD=^icm%KTE&Op{5b=wFUuLpsv0v6#tf(?yRiB8*3Fhb2F@E?71`Qi1Y2Wv|YKD~N>dFAh~zI*un*G9n89JlB;okFQz zwmhY5xkbBr%!u-qWGB4P3ujCP4I{`xJSk6yJZw3zS!jq;c`iH(nFf#3;#cJSg^nB{ z3;3^CW^J;?+OhmHx!armthQQPGdFtk%i0qK#Zx@BtlU-gPa>BhD~rD;hug{FjpXRB z>X-nvOWMlZW&O`+`fA~e!p6YFdURr4o!GjkB{mTT@q2o@C9O}*xAmjz>d}8Yk^uj4 zQefhTyfQcZ);PK|9zIB1k@O=Xkb7Zfm2J^!t>%SG#fDotQ!LnJmgR4g>w{xZ z%nT8-BIF=AGK3)*Y=n0!X|hL5`CjE#b{w)}aD38f%e@w0FKV5DUjh6`FheF`GR$`e zZx8&>hYhY;uEp}OvdtyxF0v1h+)YEB!GogABh5y`VobmW+5P}~oiByPG9!W#J728Y z<)Uj9o;Snx1H9+vPoX1tK^%%FIWA-3_h7=hAwSdc`+HTOqTL-$!pzf4%-Sh=0Ki#p zYL+q!nUUc?Yn2Oqkg@~>FIXwU1!~y-{qQ8a=6b|!HmVkTQ!JBH@4J@6d^6;P*nZy$ z6D|6^dGe`xz3Llh2LQZ=HX$PBH>mDES1&iK)+~DmFu2Lcc?6-uuS8O>{eiNNl{j9& gpVJN!?^d$q+&I+wpl!@N^?}DZ{#)c*`8bsP2M<*fL;wH) delta 991 zcmaJ<&r1|h9G{t;U(W7~yIZTSZrZACj?xAuQL98A?9iGA2ZUl^TX&x}vbxKgF|x}l z7#$+e-XT5JL1K*#fw%exI&@GBk^!mc7{rPR9s9m9&4PUJzVrQlzMt>UH$P(!nzUV2 zRTwy}Gga%0yr?y>w-(QilusCXG*{BQ%N)*~D0?}+3167Yp{64Ve4jYgDl*bV<> z|2wEZ>;*)}1wBHZuxaw0O|T;*!aXJ{+dcBOkGkenUZ3fDhPE+(JHHp9u;H2Ad0qnoqWws_^?;N0Ls z)5lPJBNX2ZwSC~*DVUy1FR=4NpZ)dET9#Wjqn+#i&ULh@5xmpgRqbd6UOp)FI5>ue*jpRjOtQ-LqhbY}=O*yXM zOqU7>_fkL@opF$jz4F2^eHE`ZrbBttxcq3bSnyiKH2Ern+o;bQN$#60=BEqj3QhyY z!nMDGsQOrz-Dc{xnFPpBWLfn$?})W**OF0X;8TfI?AHU8`x|;{kJ>x! tuple[str, bytes]: @@ -13,16 +14,19 @@ def generate_captcha(length: int = 4) -> tuple[str, bytes]: characters = string.digits + string.ascii_uppercase captcha_text = ''.join(random.choices(characters, k=length)) - # 生成验证码图片 - image = ImageCaptcha(width=150, height=50) - image_bytes = image.generate(captcha_text) - - # 将图片转换为字节流 - buffer = BytesIO() - buffer.write(image_bytes.read()) - buffer.seek(0) - - return captcha_text, buffer.getvalue() + try: + # 生成验证码图片 + image = ImageCaptcha(width=150, height=50) + image_bytes = image.generate(captcha_text) + + # 将图片转换为字节流 + buffer = BytesIO() + buffer.write(image_bytes.read()) + buffer.seek(0) + + return captcha_text, buffer.getvalue() + except Exception as e: + raise HTTPException(status_code=500, detail="验证码生成失败") async def save_captcha_to_redis(redis_conn: redis.Redis, captcha_id: str, captcha_text: str, expire_seconds: int = 300):