Spaces:
Runtime error
Runtime error
Mark-Lasfar
commited on
Commit
·
2d34eda
1
Parent(s):
1a6532e
update auth.py
Browse files- api/auth.py +64 -64
api/auth.py
CHANGED
|
@@ -19,7 +19,7 @@ import secrets
|
|
| 19 |
|
| 20 |
from api.database import User, OAuthAccount, CustomSQLAlchemyUserDatabase, get_user_db # استيراد من database.py
|
| 21 |
from api.models import UserRead, UserCreate, UserUpdate
|
| 22 |
-
|
| 23 |
# إعداد اللوقينج
|
| 24 |
logger = logging.getLogger(__name__)
|
| 25 |
|
|
@@ -76,69 +76,69 @@ class UserManager(IntegerIDMixin, BaseUserManager[User, int]):
|
|
| 76 |
await self.user_db.session.commit()
|
| 77 |
await self.user_db.session.refresh(oauth_account)
|
| 78 |
|
| 79 |
-
async def oauth_callback(
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
) -> UP:
|
| 92 |
-
|
| 93 |
-
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
|
| 97 |
-
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
|
| 143 |
# استدعاء user manager من get_user_db
|
| 144 |
async def get_user_manager(user_db: CustomSQLAlchemyUserDatabase = Depends(get_user_db)):
|
|
|
|
| 19 |
|
| 20 |
from api.database import User, OAuthAccount, CustomSQLAlchemyUserDatabase, get_user_db # استيراد من database.py
|
| 21 |
from api.models import UserRead, UserCreate, UserUpdate
|
| 22 |
+
|
| 23 |
# إعداد اللوقينج
|
| 24 |
logger = logging.getLogger(__name__)
|
| 25 |
|
|
|
|
| 76 |
await self.user_db.session.commit()
|
| 77 |
await self.user_db.session.refresh(oauth_account)
|
| 78 |
|
| 79 |
+
async def oauth_callback(
|
| 80 |
+
self,
|
| 81 |
+
oauth_name: str,
|
| 82 |
+
access_token: str,
|
| 83 |
+
account_id: str,
|
| 84 |
+
account_email: str,
|
| 85 |
+
expires_at: Optional[int] = None,
|
| 86 |
+
refresh_token: Optional[str] = None,
|
| 87 |
+
request: Optional[Request] = None,
|
| 88 |
+
*,
|
| 89 |
+
associate_by_email: bool = False,
|
| 90 |
+
is_verified_by_default: bool = False,
|
| 91 |
+
) -> UP:
|
| 92 |
+
logger.info(f"OAuth callback for {oauth_name} account {account_id}")
|
| 93 |
+
|
| 94 |
+
oauth_account = OAuthAccount(
|
| 95 |
+
oauth_name=oauth_name,
|
| 96 |
+
access_token=access_token,
|
| 97 |
+
account_id=account_id,
|
| 98 |
+
account_email=account_email,
|
| 99 |
+
expires_at=expires_at,
|
| 100 |
+
refresh_token=refresh_token,
|
| 101 |
+
)
|
| 102 |
+
|
| 103 |
+
existing_oauth_account = await self.get_by_oauth_account(oauth_name, account_id)
|
| 104 |
+
if existing_oauth_account:
|
| 105 |
+
logger.info(f"Fetching user for OAuth account with user_id: {existing_oauth_account.user_id}")
|
| 106 |
+
statement = select(User).where(User.id == existing_oauth_account.user_id)
|
| 107 |
+
result = await self.user_db.session.execute(statement)
|
| 108 |
+
user = result.scalar_one_or_none()
|
| 109 |
+
|
| 110 |
+
if user:
|
| 111 |
+
logger.info(f"User found: {user.email}, proceeding with on_after_login")
|
| 112 |
+
await self.on_after_login(user, request)
|
| 113 |
+
return user
|
| 114 |
+
else:
|
| 115 |
+
logger.error(f"No user found for OAuth account with user_id: {existing_oauth_account.user_id}")
|
| 116 |
+
raise ValueError("User not found for existing OAuth account")
|
| 117 |
+
|
| 118 |
+
if associate_by_email:
|
| 119 |
+
logger.info(f"Associating OAuth account by email: {account_email}")
|
| 120 |
+
user = await self.user_db.get_by_email(account_email)
|
| 121 |
+
if user:
|
| 122 |
+
oauth_account.user_id = user.id
|
| 123 |
+
await self.add_oauth_account(oauth_account)
|
| 124 |
+
logger.info(f"User associated: {user.email}, proceeding with on_after_login")
|
| 125 |
+
await self.on_after_login(user, request)
|
| 126 |
+
return user
|
| 127 |
+
|
| 128 |
+
logger.info(f"Creating new user for email: {account_email}")
|
| 129 |
+
user_dict = {
|
| 130 |
+
"email": account_email,
|
| 131 |
+
"hashed_password": self.password_helper.hash(secrets.token_hex(32)),
|
| 132 |
+
"is_active": True,
|
| 133 |
+
"is_verified": is_verified_by_default,
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
user = await self.user_db.create(user_dict)
|
| 137 |
+
oauth_account.user_id = user.id
|
| 138 |
+
await self.add_oauth_account(oauth_account)
|
| 139 |
+
logger.info(f"New user created: {user.email}, proceeding with on_after_login")
|
| 140 |
+
await self.on_after_login(user, request)
|
| 141 |
+
return user
|
| 142 |
|
| 143 |
# استدعاء user manager من get_user_db
|
| 144 |
async def get_user_manager(user_db: CustomSQLAlchemyUserDatabase = Depends(get_user_db)):
|