improved redirect upon login
This commit is contained in:
+6
-4
@@ -26,13 +26,12 @@ def get_current_user(request: Request):
|
|||||||
return request.session.get("user")
|
return request.session.get("user")
|
||||||
|
|
||||||
def require_login(func):
|
def require_login(func):
|
||||||
"""Decorator to require login for particular endpoints."""
|
|
||||||
@wraps(func)
|
@wraps(func)
|
||||||
async def wrapper(request: Request, *args, **kwargs):
|
async def wrapper(request: Request, *args, **kwargs):
|
||||||
if not request.session.get("user"):
|
if not request.session.get("user"):
|
||||||
# Not logged in => redirect to /login
|
# Save original URL in session before redirecting to login
|
||||||
|
request.session["redirect_after_login"] = str(request.url)
|
||||||
return RedirectResponse(url="/login", status_code=status.HTTP_302_FOUND)
|
return RedirectResponse(url="/login", status_code=status.HTTP_302_FOUND)
|
||||||
# User is logged in => proceed
|
|
||||||
return await func(request, *args, **kwargs)
|
return await func(request, *args, **kwargs)
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
@@ -55,7 +54,10 @@ async def auth(request: Request):
|
|||||||
token = await oauth.authentik.authorize_access_token(request)
|
token = await oauth.authentik.authorize_access_token(request)
|
||||||
userinfo = token.get("userinfo")
|
userinfo = token.get("userinfo")
|
||||||
request.session["user"] = dict(userinfo)
|
request.session["user"] = dict(userinfo)
|
||||||
return RedirectResponse(url="/ui")
|
|
||||||
|
# Get original destination or fallback
|
||||||
|
redirect_url = request.session.pop("redirect_after_login", "/ui")
|
||||||
|
return RedirectResponse(url=redirect_url)
|
||||||
|
|
||||||
@router.get("/logout")
|
@router.get("/logout")
|
||||||
async def logout(request: Request):
|
async def logout(request: Request):
|
||||||
|
|||||||
Reference in New Issue
Block a user