Browse Source

refactored into user management

Rodja Trappe 1 year ago
parent
commit
253b6c3954
2 changed files with 25 additions and 14 deletions
  1. 5 7
      examples/descope_auth/main.py
  2. 20 7
      examples/descope_auth/user.py

+ 5 - 7
examples/descope_auth/main.py

@@ -1,24 +1,22 @@
 #!/usr/bin/env python3
 #!/usr/bin/env python3
 
 
 import icecream
 import icecream
-from secure_page import descope_id, logout, secure_page
+import user
 
 
 from nicegui import ui
 from nicegui import ui
 
 
 icecream.install()
 icecream.install()
 
 
 
 
-@secure_page('/login')
+@user.login_page
 def login():
 def login():
-    with ui.card().classes('w-96 mx-auto'):
-        ui.element('descope-wc').props(f'project-id="{descope_id}" flow-id="sign-up-or-in"') \
-            .on('success', lambda: ui.open('/'))
+    user.login_form().on('success', lambda: ui.open('/'))
 
 
 
 
-@secure_page('/')
+@user.page('/')
 def home():
 def home():
     ui.label('Welcome!')
     ui.label('Welcome!')
-    ui.button('Logout', on_click=logout)
+    ui.button('Logout', on_click=user.logout)
 
 
 
 
 ui.run(storage_secret='THIS_NEEDS_TO_BE_CHANGED')
 ui.run(storage_secret='THIS_NEEDS_TO_BE_CHANGED')

+ 20 - 7
examples/descope_auth/secure_page.py → examples/descope_auth/user.py

@@ -2,7 +2,7 @@ import logging
 import os
 import os
 from typing import Any, Callable
 from typing import Any, Callable
 
 
-from descope import REFRESH_SESSION_TOKEN_NAME, SESSION_TOKEN_NAME, AuthException, DeliveryMethod, DescopeClient
+from descope import DescopeClient
 
 
 from nicegui import Client, app, ui
 from nicegui import Client, app, ui
 
 
@@ -16,23 +16,32 @@ except Exception as error:
 
 
 
 
 async def logout():
 async def logout():
-    ic(await ui.run_javascript('return await sdk.logout()', respond=True))
+    result = await ui.run_javascript('return await sdk.logout()', respond=True)
+    if result['code'] != 200:
+        logging.error('Logout failed: ' + result)
+        ui.notify('Logout failed', type='negative')
     ui.open('/login')
     ui.open('/login')
 
 
 
 
-def verify(token: str):
+def _verify(token: str):
     try:
     try:
         jwt_response = descope_client.validate_session(session_token=token)
         jwt_response = descope_client.validate_session(session_token=token)
-        app.storage.user['session_token'] = token
+        ic(jwt_response)
+        app.storage.user['user_id'] = jwt_response['userId']
         return True
         return True
     except Exception:
     except Exception:
-        app.storage.user['session_token'] = None
+        app.storage.user['user_id'] = None
         logging.exception("Could not validate user session.")
         logging.exception("Could not validate user session.")
         ui.notify('Wrong username or password', type='negative')
         ui.notify('Wrong username or password', type='negative')
         return False
         return False
 
 
 
 
-class secure_page(ui.page):
+def login_form():
+    with ui.card().classes('w-96 mx-auto'):
+        return ui.element('descope-wc').props(f'project-id="{descope_id}" flow-id="sign-up-or-in"')
+
+
+class page(ui.page):
 
 
     def __init__(self, path):
     def __init__(self, path):
         super().__init__(path)
         super().__init__(path)
@@ -49,7 +58,7 @@ class secure_page(ui.page):
             ''')
             ''')
             await client.connected()
             await client.connected()
             token = await ui.run_javascript('return sessionToken && !sdk.isJwtExpired(sessionToken) ? sessionToken : null;')
             token = await ui.run_javascript('return sessionToken && !sdk.isJwtExpired(sessionToken) ? sessionToken : null;')
-            if token and verify(token):
+            if token and _verify(token):
                 if self.path == '/login':
                 if self.path == '/login':
                     await ui.run_javascript('sdk.refresh()', respond=False)
                     await ui.run_javascript('sdk.refresh()', respond=False)
                     ui.open('/')
                     ui.open('/')
@@ -62,3 +71,7 @@ class secure_page(ui.page):
                     func()
                     func()
 
 
         return super().__call__(content)
         return super().__call__(content)
+
+
+def login_page(func: Callable[..., Any]) -> Callable[..., Any]:
+    return page('/login')(func)