使用 djoser 进行 Django ninja 令牌身份验证
URL 来源:https://stackoverflow.com/questions/70716976/django-ninja-token-authentication-with-djoser
中文内容:这个问题显示了研究工作;它是有用且清晰的
2
保存此问题。
显示此帖的活动。
我已经使用 Django Ninja 框架实现了 CRUD,但现在我希望在我的应用程序中进行认证。我已经安装并配置了 Djoser,因此现在我可以生成令牌,但我不知道如何在我的 CRUD 中进行验证
class AuthBearer(HttpBearer):
def authenticate(self, request, token):
if token == "supersecret":
return token
@api.get("/bearer", auth=AuthBearer())
def bearer(request):
return {"token": request.auth}
我应该能够在“AuthBearer”函数中检查令牌,但我不知道如何做
my repo (link)
分享这个问题的链接
Copy linkCC BY-SA 4.0
Follow
关注此问题以接收通知
12.3k2222 gold badges6868 silver badges103103 bronze badges
提问于 2022 年 1 月 14 日 21 点 59 分
ArsalanArsalan
7722 silver badges99 bronze badges
1 Answer 1
排序方式:重置为默认
最高分(默认) 热门(最近的投票更重要) 修改日期(最新的先) 创建日期(最早的先)
这个答案有用
6
保存答案。
显示此帖的活动。
所以基本上你必须扩展 Ninja 的 HttpBearer 类并实现 authenticate 方法,该方法将接受请求和令牌作为参数。如果用户未经过身份验证,此方法将返回 None,如果用户经过身份验证,则返回将在 request.auth 中填充的字符串。通常,此字符串将是用户名,因此你可以在所有端点中使用它。类似这样(我正在使用 PyJWT 进行令牌解码):
import jwt
from ninja.security import HttpBearer
class AuthBearer(HttpBearer):
def authenticate(self, request, token):
try:
#JWT secret key is set up in settings.py
JWT_SIGNING_KEY = getattr(settings, "JWT_SIGNING_KEY", None)
payload = jwt.decode(token, JWT_SIGNING_KEY, algorithms=["HS256"])
username: str = payload.get("sub")
if username is None:
return None
except jwt.PyJWTError as e:
return None
return username
分享这个答案的链接
Copy linkCC BY-SA 4.0
Follow
按照此回答进行操作,即可接收通知
已回答,2022 年 1 月 15 日,上午 11:30
abolfazlmalekahmadiabolfazlmalekahmadi
26822 silver badges1717 bronze badges
1
- 谢谢这段代码示例!你是如何生成编码后的令牌的呢?你会将这些令牌存储在存储中吗?
@media (prefers-color-scheme: dark) { body { color: #fff !important; background-color: #272727 !important; } } body { overflow-y: hidden; }
本文总阅读量次