Use*_*ser 8 python django django-rest-framework
我有一个架构问题.我正在使用Django(使用管理面板)和DRF(使用JWT进行无状态身份验证的api).
Django具有由模型表示的Admin用户,该用户与默认的Django用户模型大致相同.管理员仅使用Django Admin,不能使用DRF api.
DRF有API用户,只允许通过DRF使用api,不能与Django Admin或Django Session等交互.
我知道最好的方法是使用多模型继承,如:
class User(DjangoUserModel):
pass
class Admin(User):
pass
class API(User):
pass
AUTH_USER_MODEL = "User"
Run Code Online (Sandbox Code Playgroud)
但问题是,那些用户完全不同.例如:API用户具有复杂的复合键作为用户名字段,这与简单的Admin用户名字段无法组合.还有很多其他的差异...
问题是:我可以使用不是AUTH_USER_MODELDRF实例的用户对象吗?所以self.request.user将存储一个没有以任何方式连接的模型实例AUTH_USER_MODEL.你们有没有做过类似的事情?
嗯,是的,先生。你可以这样做。看下面的例子:
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
class AuthenticatedServiceClient:
def is_authenticated(self):
return True
class JwtServiceOnlyAuthentication(JSONWebTokenAuthentication):
def authenticate_credentials(self, payload):
# Assign properties from payload to the AuthenticatedServiceClient object if necessary
return AuthenticatedServiceClient()
Run Code Online (Sandbox Code Playgroud)
在 settings.py 中:
REST_FRAMEWORK = {
'UNAUTHENTICATED_USER': None,
'DEFAULT_AUTHENTICATION_CLASSES': (
'myapp.authentication.JwtServiceOnlyAuthentication',
),
}
Run Code Online (Sandbox Code Playgroud)
如果需要,您可以DEFAULT_AUTHENTICATION_CLASSES为 DRF定义附加内容。身份验证类就像中间件,只是一个正在填充的队列request.user。
添加您自己的使用不同用户模型的身份验证类AUTH_USER_MODEL将与您完全一样工作,除了。
| 归档时间: |
|
| 查看次数: |
748 次 |
| 最近记录: |