@@ -90,7 +90,7 @@ async def profile(user: Annotated[User | None, Depends(get_user)]) -> list[AnyCo
90
90
@router .post ('/logout' , response_model = FastUI , response_model_exclude_none = True )
91
91
async def logout_form_post (user : Annotated [User | None , Depends (get_user )]) -> list [AnyComponent ]:
92
92
if user is not None :
93
- await user_db .save_user (user )
93
+ await user_db .delete_user (user )
94
94
return [c .FireEvent (event = AuthEvent (token = False , url = '/auth/login' ))]
95
95
96
96
@@ -118,6 +118,9 @@ async def get_user(self, token: str) -> User | None:
118
118
return op_user
119
119
120
120
async def save_user (self , user : User ) -> None :
121
+ for k , v in list (self ._users .items ()):
122
+ if v .email == user .email :
123
+ del self ._users [k ]
121
124
self ._users [user .token ] = user
122
125
self ._sync ()
123
126
@@ -126,15 +129,15 @@ async def delete_user(self, user: User) -> None:
126
129
self ._sync ()
127
130
128
131
async def count (self ):
132
+ self ._sync ()
129
133
return len (self ._users )
130
134
131
135
def _sync (self ) -> None :
132
136
# keep only the most recently active 1000 users
133
- if len (self ._users ) > 1000 :
134
- active = datetime .now () - timedelta (minutes = 30 )
135
- users = [u for u in self ._users .values () if u .last_active > active ]
136
- users .sort (key = lambda u : u .last_active , reverse = True )
137
- self ._users = {u .token : u for u in users [:1000 ]}
137
+ active = datetime .now () - timedelta (minutes = 30 )
138
+ users = [u for u in self ._users .values () if u .last_active > active ]
139
+ users .sort (key = lambda u : u .last_active , reverse = True )
140
+ self ._users = {u .token : u for u in users [:1000 ]}
138
141
139
142
# save
140
143
self ._file .write_bytes (self ._ta .dump_json (list (self ._users .values ()), indent = 2 ))
0 commit comments