FreeAuth 依赖项
FreeAuth 提供了几个可注入到您的接口路由中的依赖项,您可以直接通过 FreeAuthApp
实例调用。
current_user
您可以通过在接口路由中注入该依赖项获取当前登录的用户对象,如果用户未登录,将返回 None
,例如:
import json
from fastapi import Depends, Response
from freeauth.db.auth.auth_qry_async_edgeql import (
create_audit_log,
sign_out,
)
from freeauth.ext.fastapi_ext.utils import get_client_info
@router.post("/logout")
async def logout(
resp: Response,
client_info=Depends(get_client_info),
token=Depends(auth_app.get_access_token),
user=Depends(auth_app.current_user),
):
if not token:
return "ok"
await sign_out(auth_app.db, access_token=token.access_token)
if current_user:
await create_audit_log(
auth_app.db,
user_id=user.id,
client_info=json.dumps(client_info),
status_code="OK",
event_type="SignOut",
)
resp.delete_cookie("access_token")
return "ok"
current_user_or_401
用于从请求中获取当前登录的用户对象。如果用户未登录,则抛出 HTTPException
异常,状态码为 401
(未授权),例如:
@router.get("/protected-route")
def protected_route(user=Depends(auth_app.current_user_or_401)):
return f"Hello, {user.name or user.username}"
perm_accepted()
用于判断当前登录用户是否拥有指定的权限,perm_accepted
支持同时传入多个权限代码。如果用户具有指定的权限,请求将继续进行,并返回当前登录的用户对象。否则会抛出 HTTPException
,状态码为 403
(禁止访问),例如:
@router.get(
"/items/{item_id}"
dependencies=[Depends(auth_app.perm_accepted("view:item"))],
)
def show_item(item_id: int):
...
get_client_info
用于获取当前登录用户的客户端信息,包含用户代理(User-Agent)数据,示例见 current_user
。
Table of Contents