[英]Custom User Authentication using DRF
想用 Django 創建一個 Web RESTful API。 為此,我使用Django REST Framework 。
使用自定義 User model (繼承AbstractBaseUser )公開要使用的端點獲得身份驗證的必要步驟是什么?
在指定自定義用戶 model方面,文檔很好。
在我們的 models.py 中,導入AbstractBaseUser和BaseUserManager 。
然后,創建您的 class,例如,
class Profiles(AbstractBaseUser):
userId = models.CharField(max_length=36, unique= True)
username = models.CharField(max_lenght=20)
password = models.CharField(max_lenght=256)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
...
這里設置USERNAME_FIELD和REQUIRED_FIELDS來定義登錄時哪些字段是重要的非常重要。
同樣在您的自定義用戶 model class 中,您必須創建兩個處理權限所需的函數,即has_perm()和has_module_perms() 。
現在下一步是創建一個自定義用戶管理器,這是 Django 推薦的。
所以我們創建一個 class 像
class ProfilesManager(BaseUserManager):
...
在 class 中,需要覆蓋兩個方法,即create_user()和create_superuser() ,分別定義創建用戶和創建超級用戶時發生的情況。
然后,我們需要用對象參數告訴 Profiles class 這個 ProfilesManager class 在哪里。
class Profiles(AbstractBaseUser):
userId = models.CharField(max_length=36, unique= True)
email = models.CharField(max_lenght=20)
password = models.CharField(max_lenght=256)
is_admin = models.BooleanField(default=False)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
...
USERNAME_FIELDS = 'userId'
REQUIRED_FIELDS = ['email']
objects = ProfilesManager()
def has_perm(self, perm, obj=None):
return self.is_admin
def has_module_perms(self, app_label):
return True
Go 到您的 settings.py 並添加一個AUTH_USER_MODEL屬性,指定 model Django 應該使用哪個用戶。
AUTH_USER_MODEL = 'appName.Profiles'
要提交上面所做的更改,必須通過運行進行遷移
python manage.py makemigrations
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.