File tree Expand file tree Collapse file tree 3 files changed +18
-20
lines changed Expand file tree Collapse file tree 3 files changed +18
-20
lines changed Original file line number Diff line number Diff line change @@ -15,37 +15,32 @@ async def user_count() -> int:
15
15
return result .scalar ()
16
16
17
17
18
- def create_account (name : str , email : str , password : str ) -> User :
19
- session = db_session .create_session ()
20
-
21
- try :
22
- user = User ()
23
- user .email = email
24
- user .name = name
25
- user .hash_password = crypto .hash (password , rounds = 172_434 )
18
+ async def create_account (name : str , email : str , password : str ) -> User :
19
+ user = User ()
20
+ user .email = email
21
+ user .name = name
22
+ user .hash_password = crypto .hash (password , rounds = 172_434 )
26
23
24
+ async with db_session .create_async_session () as session :
27
25
session .add (user )
28
- session .commit ()
26
+ await session .commit ()
29
27
30
- return user
31
- finally :
32
- session .close ()
28
+ return user
33
29
34
30
35
- def login_user (email : str , password : str ) -> Optional [User ]:
36
- session = db_session .create_session ()
31
+ async def login_user (email : str , password : str ) -> Optional [User ]:
32
+ async with db_session .create_async_session () as session :
33
+ query = select (User ).filter (User .email == email )
34
+ results = await session .execute (query )
37
35
38
- try :
39
- user = session .query (User ).filter (User .email == email ).first ()
36
+ user = results .scalar_one_or_none ()
40
37
if not user :
41
38
return user
42
39
43
40
if not crypto .verify (password , user .hash_password ):
44
41
return None
45
42
46
43
return user
47
- finally :
48
- session .close ()
49
44
50
45
51
46
async def get_user_by_id (user_id : int ) -> Optional [User ]:
Original file line number Diff line number Diff line change
1
+ import asyncio
2
+
1
3
import fastapi
2
4
from fastapi_chameleon import template
3
5
from starlette import status
@@ -37,7 +39,7 @@ async def register(request: Request):
37
39
return vm .to_dict ()
38
40
39
41
# Create the account
40
- account = user_service .create_account (vm .name , vm .email , vm .password )
42
+ account = await user_service .create_account (vm .name , vm .email , vm .password )
41
43
42
44
# Login user
43
45
response = fastapi .responses .RedirectResponse (url = '/account' , status_code = status .HTTP_302_FOUND )
@@ -65,8 +67,9 @@ async def login_post(request: Request):
65
67
if vm .error :
66
68
return vm .to_dict ()
67
69
68
- user = user_service .login_user (vm .email , vm .password )
70
+ user = await user_service .login_user (vm .email , vm .password )
69
71
if not user :
72
+ await asyncio .sleep (5 )
70
73
vm .error = "The account does not exist or the password is wrong."
71
74
return vm .to_dict ()
72
75
You can’t perform that action at this time.
0 commit comments