当前位置: 首页 > article >正文

【Django-ninja】使用Django ninja 进行auth鉴权

 1. 使用django_auth

django_auth其实就是SessionAuth类鉴权方式。

使用Django自带的auth模块,通过/login实现登录,然后可以访问/api_withdjango_auth。

通过/logout可以退出登录。

from django.contrib import auth


class LoginSchema(Schema):
    user:str
    password: str


@demo_api.get('/login')
def login(request, login_in: LoginSchema=Query(...)):
    user = auth.authenticate(request, username=login_in.user, password=login_in.password)
    if user:
        auth.login(request, user)
        return {"message": str(request.session), 'request': str(request)}
    else:
        return {"message": "fail"}


@demo_api.get('/logout')
def logout(request):
    auth.logout(request)
    return {"message": "logout", "session": str(request.session), 'request': str(request)}


@demo_api.get("/django_auth", auth=django_auth)
def api_with_django_auth(request):
    return {"data": request.session[auth.HASH_SESSION_KEY], "auth": f"{request.auth}"}


2.其他所有内置的鉴权方式


__all__ = [
    "APIKeyCookie",
    "APIKeyHeader",
    "APIKeyQuery",
    "HttpBasicAuth",
    "HttpBearer",
    "SessionAuth",
    "SessionAuthSuperUser",
    "django_auth",
]

3. 自定义鉴权方式

"auth="参数接收一个Callable对象。如果这个对象的返回结果可以转换成布尔类型的True值时,NinjaAPI即可通过鉴权。同时这个值也会被赋给request.auth。

def ip_whitelist(request):
    if request.META["REMOTE_ADDR"] == "8.8.8.8":
        return "8.8.8.8"


@api.get("/ipwhitelist", auth=ip_whitelist)
def ipwhitelist(request):
    return f"Authenticated client, IP = {request.auth}"

4.多个鉴权器

逐个鉴权器进行鉴权,有一个通过即可通过。 

from ninja.security import APIKeyQuery, APIKeyHeader


class AuthCheck:
    def authenticate(self, request, key):
        if key == "supersecret":
            return key


class QueryKey(AuthCheck, APIKeyQuery):
    pass


class HeaderKey(AuthCheck, APIKeyHeader):
    pass


@api.get("/multiple", auth=[QueryKey(), HeaderKey()])
def multiple(request):
    return f"Token = {request.auth}"


 

 


http://www.kler.cn/a/227509.html

相关文章:

  • 清华系2B模型杀出,性能吊打LLaMA-13B
  • 如何在linux下使用openssl自签https的ip证书配置nginx
  • 笔记:《NCT全国青少年编程能力等级测试教程Python语言编程二级》
  • 单臂路由实验(华为)
  • 单片机基础知识
  • 20.HarmonyOS App(JAVA)表格布局Layout使用方法
  • 【大数据面试题】001 Flink 的 Checkpoint 原理
  • KubeMQ简介
  • 机器学习算法之分类和回归树(CART)
  • 腾讯云幻兽帕鲁Palworld服务器价格表,2024年2月最新
  • 100183. 最大好子数组和
  • vue实现瀑布流
  • Linux下的线程操作
  • Java 集合List相关面试题
  • java hutool工具类实现将数据下载到excel
  • 蓝桥杯备战——13.PCF8591芯片的使用
  • Windows11通过Hyper-V创建VM,然后通过vscode连接vm进行开发
  • QT Creator 的代码重构工具
  • 基于Langchain-Chatchat + chatglm3部署一套属于自己的本地知识库
  • linux远程执行命令后中断联系使远程机独立运行