修复登录时邮箱大小写敏感
This commit is contained in:
@@ -125,12 +125,13 @@ async def login(request: LoginRequest):
|
|||||||
"""
|
"""
|
||||||
用户登录端点
|
用户登录端点
|
||||||
"""
|
"""
|
||||||
email = request.email
|
raw_email = (request.email or "").strip()
|
||||||
users = UserService.query(email=email)
|
email = raw_email.lower()
|
||||||
|
users = UserService.query_user_by_email_insensitive(raw_email)
|
||||||
if not users:
|
if not users:
|
||||||
raise HTTPException(
|
raise HTTPException(
|
||||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||||
detail=f"Email: {email} is not registered!"
|
detail=f"Email: {raw_email} is not registered!"
|
||||||
)
|
)
|
||||||
|
|
||||||
password = request.password
|
password = request.password
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ from datetime import datetime
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
import peewee
|
import peewee
|
||||||
|
from peewee import fn
|
||||||
from werkzeug.security import generate_password_hash, check_password_hash
|
from werkzeug.security import generate_password_hash, check_password_hash
|
||||||
|
|
||||||
from api.db import UserTenantRole
|
from api.db import UserTenantRole
|
||||||
@@ -93,8 +94,15 @@ class UserService(CommonService):
|
|||||||
Returns:
|
Returns:
|
||||||
User object if authentication successful, None otherwise.
|
User object if authentication successful, None otherwise.
|
||||||
"""
|
"""
|
||||||
user = cls.model.select().where((cls.model.email == email),
|
normalized_email = (email or "").strip().lower()
|
||||||
(cls.model.status == StatusEnum.VALID.value)).first()
|
user = (
|
||||||
|
cls.model.select()
|
||||||
|
.where(
|
||||||
|
fn.Lower(cls.model.email) == normalized_email,
|
||||||
|
cls.model.status == StatusEnum.VALID.value
|
||||||
|
)
|
||||||
|
.first()
|
||||||
|
)
|
||||||
if user and check_password_hash(str(user.password), password):
|
if user and check_password_hash(str(user.password), password):
|
||||||
return user
|
return user
|
||||||
else:
|
else:
|
||||||
@@ -106,6 +114,16 @@ class UserService(CommonService):
|
|||||||
users = cls.model.select().where((cls.model.email == email))
|
users = cls.model.select().where((cls.model.email == email))
|
||||||
return list(users)
|
return list(users)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@DB.connection_context()
|
||||||
|
def query_user_by_email_insensitive(cls, email):
|
||||||
|
normalized_email = (email or "").strip().lower()
|
||||||
|
users = (
|
||||||
|
cls.model.select()
|
||||||
|
.where(fn.Lower(cls.model.email) == normalized_email)
|
||||||
|
)
|
||||||
|
return list(users)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@DB.connection_context()
|
@DB.connection_context()
|
||||||
def save(cls, **kwargs):
|
def save(cls, **kwargs):
|
||||||
|
|||||||
Reference in New Issue
Block a user