用户认证¶
仅需在 Operation
上设置 auth 参数即可实现认证。
以下示例代码定义了两个接口,GET 仅需要用户登录,POST 则需要用户具有管理员权限。若用户未登录,将返回 HTTP 401 响应;若用户非管理员,将返回 HTTP 403 响应。
views.py [示例1]¶
from django_oasis.auth import IsAdministrator, IsAuthenticated
from django_oasis.core import Operation, Resource
@Resource("/to/path")
class API:
@Operation(auth=IsAuthenticated)
def get(self): ...
@Operation(auth=IsAdministrator)
def post(self): ...
SwaggerUI [示例1]
自定义认证¶
继承 django_oasis.auth.BaseAuth
抽象类,并实现其抽象方法。
示例1¶
假设项目使用了 django.contrib.auth 作为用户认证系统,并且改用 HTTP Basic 作为认证方式。你需要自行实现认证类:
views.py [示例2]¶
from django_oasis.auth import BaseAuth
from django_oasis.core import Operation, Resource
from django_oasis.exceptions import UnauthorizedError
class IsOurUser(BaseAuth):
declare_security = {
"type": "http",
"scheme": "basic",
}
declare_responses = {
401: {
"description": "未登录",
}
}
def check_auth(self, request):
# 若用户未登录,抛出 UnauthorizedError,这将返回 HTTP 401 响应。
if not request.user.is_authenticated:
raise UnauthorizedError
@Resource("/to/path")
class API:
@Operation(auth=IsOurUser)
def get(self): ...
SwaggerUI [示例2]