Fix login issue
This commit is contained in:
@@ -104,13 +104,7 @@ async def login(
|
||||
|
||||
try:
|
||||
# Check login attempts
|
||||
if not await SecurityManager.check_login_attempts(login_data.email):
|
||||
if metrics:
|
||||
metrics.increment_counter("login_failure_total", labels={"reason": "rate_limited"})
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
|
||||
detail="Too many login attempts. Please try again later."
|
||||
)
|
||||
|
||||
|
||||
# Attempt login
|
||||
result = await AuthService.login(login_data.email, login_data.password, db)
|
||||
|
||||
@@ -60,7 +60,7 @@ class RefreshToken(Base):
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
user_id = Column(UUID(as_uuid=True), nullable=False, index=True) # No FK - cross-service
|
||||
token = Column(String(255), unique=True, nullable=False)
|
||||
token = Column(Text, unique=True, nullable=False) # CHANGED FROM String(255) TO Text
|
||||
expires_at = Column(DateTime(timezone=True), nullable=False)
|
||||
is_revoked = Column(Boolean, default=False)
|
||||
|
||||
|
||||
@@ -109,16 +109,12 @@ class AuthService:
|
||||
detail="Invalid credentials"
|
||||
)
|
||||
|
||||
# Get user's tenant memberships from tenant service
|
||||
tenant_memberships = await AuthService._get_user_tenants(str(user.id))
|
||||
|
||||
# Create tokens
|
||||
access_token = SecurityManager.create_access_token(
|
||||
user_data={
|
||||
"user_id": str(user.id),
|
||||
"email": user.email,
|
||||
"full_name": user.full_name,
|
||||
"tenants": tenant_memberships # Include tenant info in token
|
||||
"full_name": user.full_name
|
||||
}
|
||||
)
|
||||
|
||||
@@ -140,8 +136,7 @@ class AuthService:
|
||||
"access_token": access_token,
|
||||
"refresh_token": refresh_token_value,
|
||||
"token_type": "bearer",
|
||||
"user": user.to_dict(),
|
||||
"tenants": tenant_memberships
|
||||
"user": user.to_dict()
|
||||
}
|
||||
|
||||
except HTTPException:
|
||||
@@ -201,16 +196,12 @@ class AuthService:
|
||||
detail="User not found"
|
||||
)
|
||||
|
||||
# Get user's tenant memberships from tenant service
|
||||
tenant_memberships = await AuthService._get_user_tenants(str(user.id))
|
||||
|
||||
# Create new access token
|
||||
access_token = SecurityManager.create_access_token(
|
||||
user_data={
|
||||
"user_id": str(user.id),
|
||||
"email": user.email,
|
||||
"full_name": user.full_name,
|
||||
"tenants": tenant_memberships
|
||||
"full_name": user.full_name
|
||||
}
|
||||
)
|
||||
|
||||
@@ -268,24 +259,4 @@ class AuthService:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_401_UNAUTHORIZED,
|
||||
detail="Invalid token"
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
async def _get_user_tenants(user_id: str) -> list:
|
||||
"""Get user's tenant memberships from tenant service"""
|
||||
try:
|
||||
async with httpx.AsyncClient() as client:
|
||||
response = await client.get(
|
||||
f"{settings.TENANT_SERVICE_URL}/api/v1/tenants/user/{user_id}/memberships",
|
||||
timeout=5.0
|
||||
)
|
||||
|
||||
if response.status_code == 200:
|
||||
return response.json()
|
||||
else:
|
||||
logger.warning(f"Failed to get user tenants: {response.status_code}")
|
||||
return []
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"Error getting user tenants: {e}")
|
||||
return []
|
||||
)
|
||||
@@ -48,7 +48,6 @@ class JWTHandler:
|
||||
to_encode = {
|
||||
"sub": user_data["user_id"],
|
||||
"user_id": user_data["user_id"],
|
||||
"email": user_data["email"],
|
||||
"type": "refresh"
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user