用户认证

仅需在 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]