[英]How to use both Django Auth and DRF Token auth?
我正在構建一個 Django 網絡應用程序,我想要兩件事:
我如何為上述目的保留兩個身份驗證系統。 從我讀過的內容來看,每個人都要求覆蓋 User 模型,但我不想這樣做。 相反,我想同時保留兩者。 我應該采取什么策略?
PS:可能是我,但我在 DRF 的文檔中找不到任何解決方案。 如果有,請指出我正確的方向。
Django 確實提供了使用自定義用戶模型的選項。 但是您可以擁有一個且只有一個用戶模型。
該過程相當簡單,創建您自己的模型繼承 django.contrib.auth.models.AbstractUser 並指定 AUTH_USER_MODEL 設置變量。 Django 管理員與“自定義用戶模型”概念配合得很好。 DRF 令牌模型還使用 settings.AUTH_USER_MODEL var 作為其 OneToOne 關系。 因此,這可能是一個可行的解決方案。
要分離用戶類型,您可以使用帶有代表用戶類型的選項的 char 字段或使用現有的 Django 組機制。 但是,在這兩種情況下,您仍然只能擁有一個用戶模型。
對於任何特定細節,您可以與存儲額外信息的不同模型建立一對一關系。
這樣的事情會做,
from django.contrib.auth.models import AbstractUser
from model_utils.choices import Choices # Useful package
from django.utils.functional import cached_property
class User(AbstractUser):
USER_TYPES = Choices(
("store_owner", "Store Owner"),
("customer", "Customer"),
)
...hack...
user_type = models.CharField(choices=USER_TYPES)
...hack...
@cached_property
def is_store_owner(self):
return (
self.user_type == self.USER_TYPES.store_owner
and self.store_owner is not None
)
@cached_property
def is_customer(self):
return (
self.user_type == self.USER_TYPES.customer
and self.customer is not None
)
class StoreOwner(models.Model):
user = models.OneToOneField(
"yourapp.User",
related_name="store_owner",
)
# ...extra store owner details...
class Customer(models.Model):
user = models.OneToOneField(
"userapp.User",
related_name="customer",
)
# ...extra customer details...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.