fix: login with id from mongo

This commit is contained in:
akhdanre 2025-03-19 20:03:20 +07:00
parent 7f5479188e
commit bc5094ed7d
10 changed files with 53 additions and 31 deletions

View File

@ -13,13 +13,27 @@ class AuthController:
self.auth_service = authService
def login(self):
try:
data = request.get_json()
dataSchema = LoginSchema(**data)
response = self.auth_service.login(dataSchema)
if response.success:
return jsonify(response.to_dict()), 200
return jsonify(response.to_dict()), 400
return jsonify({}), 200
return jsonify({}), 400
except ValidationError as e:
current_app.logger.error(f"Validation error: {e}")
response = ResponseSchema(message="Invalid input", data=None, meta=None)
return jsonify(response.model_dump()), 400
except Exception as e:
current_app.logger.error(
f"Error during Google login: {str(e)}", exc_info=True
)
response = ResponseSchema(
message="Internal server error", data=None, meta=None
)
return jsonify(response.model_dump()), 500
def google_login(self):
"""Handles Google Login via ID Token verification"""

View File

@ -9,7 +9,6 @@ class UserMapper:
google_id: str, email: str, payload: Dict[str, Optional[str]]
) -> UserEntity:
return UserEntity(
id=str(google_id),
google_id=google_id,
email=email,
name=payload.get("name"),

View File

@ -1,3 +1,7 @@
from .user_entity import UserEntity
from .base import PyObjectId
__all__ = ["UserEntity"]
__all__ = [
"UserEntity",
"PyObjectId",
]

View File

@ -0,0 +1,19 @@
from bson import ObjectId
class PyObjectId(ObjectId):
"""Custom ObjectId type for Pydantic to handle MongoDB _id"""
@classmethod
def __get_validators__(cls):
yield cls.validate
@classmethod
def validate(cls, v):
if not ObjectId.is_valid(v):
raise ValueError("Invalid ObjectId")
return ObjectId(v)
@classmethod
def __modify_schema__(cls, field_schema):
field_schema.update(type="string")

View File

@ -1,10 +1,11 @@
from typing import Optional
from pydantic import BaseModel, EmailStr
from datetime import date, datetime
from .base import PyObjectId
class UserEntity(BaseModel):
id: str
_id: Optional[PyObjectId] = None
google_id: Optional[str] = None
email: EmailStr
password: Optional[str] = None

View File

@ -27,7 +27,6 @@ class AuthService:
existing_user = self.user_repository.get_by_google_id(google_id)
if existing_user:
current_app.logger.info(f"User {existing_user.email} already exists ")
if existing_user.email == email:
return existing_user
return AuthException("Email not match")
@ -39,25 +38,13 @@ class AuthService:
return self.user_repository.get_user_by_id(user_id=user_id)
def login(self, data: LoginSchema):
try:
user_data = self.user_repository.get_user_by_email(data.email)
if user_data == None:
# return ApiResponse(success=False, message="User not found", data=None)
return None
if user_data["password"] == data.password:
del user_data["password"]
# return ApiResponse(
# success=True, message="Login success", data=user_data
# )
return None
# return ApiResponse(success=False, message="Invalid password", data=None)
return None
except Exception as e:
print(f"the issue is {e}")
# return ApiResponse(
# success=False, message="Internal server error", data=None
# )
if user_data.password == data.password:
del user_data.password
return user_data
return None

View File

@ -1,2 +0,0 @@
2025-03-19 11:45:54,493 - INFO - Logger has been initialized for Flask application.
2025-03-19 11:46:06,381 - INFO - Logger has been initialized for Flask application.

View File

View File

View File