|
@@ -1,17 +1,16 @@
|
|
#!/usr/bin/env python3
|
|
#!/usr/bin/env python3
|
|
-'''This is a just very simple authentication example.
|
|
|
|
|
|
+"""This is a just very simple authentication example.
|
|
|
|
|
|
Please see the `OAuth2 example at FastAPI <https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/>`_ or
|
|
Please see the `OAuth2 example at FastAPI <https://fastapi.tiangolo.com/tutorial/security/simple-oauth2/>`_ or
|
|
use the great `Authlib package <https://docs.authlib.org/en/v0.13/client/starlette.html#using-fastapi>`_ to implement a classing real authentication system.
|
|
use the great `Authlib package <https://docs.authlib.org/en/v0.13/client/starlette.html#using-fastapi>`_ to implement a classing real authentication system.
|
|
Here we just demonstrate the NiceGUI integration.
|
|
Here we just demonstrate the NiceGUI integration.
|
|
-'''
|
|
|
|
-
|
|
|
|
|
|
+"""
|
|
from fastapi.responses import RedirectResponse
|
|
from fastapi.responses import RedirectResponse
|
|
|
|
|
|
from nicegui import app, ui
|
|
from nicegui import app, ui
|
|
|
|
|
|
# in reality users passwords would obviously need to be hashed
|
|
# in reality users passwords would obviously need to be hashed
|
|
-users = [('user1', 'pass1'), ('user2', 'pass2')]
|
|
|
|
|
|
+passwords = {'user1': 'pass1', 'user2': 'pass2'}
|
|
|
|
|
|
|
|
|
|
@ui.page('/')
|
|
@ui.page('/')
|
|
@@ -20,14 +19,13 @@ def main_page() -> None:
|
|
return RedirectResponse('/login')
|
|
return RedirectResponse('/login')
|
|
with ui.column().classes('absolute-center items-center'):
|
|
with ui.column().classes('absolute-center items-center'):
|
|
ui.label(f'Hello {app.storage.user["username"]}!').classes('text-2xl')
|
|
ui.label(f'Hello {app.storage.user["username"]}!').classes('text-2xl')
|
|
- ui.button('', on_click=lambda: (app.storage.user.clear(), ui.open('/login'))) \
|
|
|
|
- .props('outline round icon=logout')
|
|
|
|
|
|
+ ui.button(on_click=lambda: (app.storage.user.clear(), ui.open('/login'))).props('outline round icon=logout')
|
|
|
|
|
|
|
|
|
|
@ui.page('/login')
|
|
@ui.page('/login')
|
|
def login() -> None:
|
|
def login() -> None:
|
|
def try_login() -> None: # local function to avoid passing username and password as arguments
|
|
def try_login() -> None: # local function to avoid passing username and password as arguments
|
|
- if (username.value, password.value) in users:
|
|
|
|
|
|
+ if passwords.get(username.value) == password.value:
|
|
app.storage.user.update({'username': username.value, 'authenticated': True})
|
|
app.storage.user.update({'username': username.value, 'authenticated': True})
|
|
ui.open('/')
|
|
ui.open('/')
|
|
else:
|
|
else:
|
|
@@ -37,8 +35,8 @@ def login() -> None:
|
|
return RedirectResponse('/')
|
|
return RedirectResponse('/')
|
|
with ui.card().classes('absolute-center'):
|
|
with ui.card().classes('absolute-center'):
|
|
username = ui.input('Username').on('keydown.enter', try_login)
|
|
username = ui.input('Username').on('keydown.enter', try_login)
|
|
- password = ui.input('Password').props('type=password').on('keydown.enter', try_login)
|
|
|
|
|
|
+ password = ui.input('Password').on('keydown.enter', try_login).props('type=password')
|
|
ui.button('Log in', on_click=try_login)
|
|
ui.button('Log in', on_click=try_login)
|
|
|
|
|
|
|
|
|
|
-ui.run()
|
|
|
|
|
|
+ui.run(storage_secret='THIS_NEEDS_TO_BE_CHANGED')
|