当前位置:   article > 正文

【Django-ninja】使用Django ninja 进行auth鉴权_django ninja通用权限管理系统

django ninja通用权限管理系统

 1. 使用django_auth

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

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

通过/logout可以退出登录。

  1. from django.contrib import auth
  2. class LoginSchema(Schema):
  3. user:str
  4. password: str
  5. @demo_api.get('/login')
  6. def login(request, login_in: LoginSchema=Query(...)):
  7. user = auth.authenticate(request, username=login_in.user, password=login_in.password)
  8. if user:
  9. auth.login(request, user)
  10. return {"message": str(request.session), 'request': str(request)}
  11. else:
  12. return {"message": "fail"}
  13. @demo_api.get('/logout')
  14. def logout(request):
  15. auth.logout(request)
  16. return {"message": "logout", "session": str(request.session), 'request': str(request)}
  17. @demo_api.get("/django_auth", auth=django_auth)
  18. def api_with_django_auth(request):
  19. return {"data": request.session[auth.HASH_SESSION_KEY], "auth": f"{request.auth}"}


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

  1. __all__ = [
  2. "APIKeyCookie",
  3. "APIKeyHeader",
  4. "APIKeyQuery",
  5. "HttpBasicAuth",
  6. "HttpBearer",
  7. "SessionAuth",
  8. "SessionAuthSuperUser",
  9. "django_auth",
  10. ]

3. 自定义鉴权方式

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

  1. def ip_whitelist(request):
  2. if request.META["REMOTE_ADDR"] == "8.8.8.8":
  3. return "8.8.8.8"
  4. @api.get("/ipwhitelist", auth=ip_whitelist)
  5. def ipwhitelist(request):
  6. return f"Authenticated client, IP = {request.auth}"

4.多个鉴权器

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

  1. from ninja.security import APIKeyQuery, APIKeyHeader
  2. class AuthCheck:
  3. def authenticate(self, request, key):
  4. if key == "supersecret":
  5. return key
  6. class QueryKey(AuthCheck, APIKeyQuery):
  7. pass
  8. class HeaderKey(AuthCheck, APIKeyHeader):
  9. pass
  10. @api.get("/multiple", auth=[QueryKey(), HeaderKey()])
  11. def multiple(request):
  12. return f"Token = {request.auth}"


 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/389215
推荐阅读
相关标签
  

闽ICP备14008679号