簡體   English   中英

使用 DRF 的自定義用戶身份驗證

[英]Custom User Authentication using DRF

想用 Django 創建一個 Web RESTful API。 為此,我使用Django REST Framework

使用自定義 User model (繼承AbstractBaseUser )公開要使用的端點獲得身份驗證的必要步驟是什么?

1.創建自定義用戶Model

指定自定義用戶 model方面,文檔很好。

在我們的 models.py 中,導入AbstractBaseUserBaseUserManager

然后,創建您的 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_FIELDREQUIRED_FIELDS來定義登錄時哪些字段是重要的非常重要。

同樣在您的自定義用戶 model class 中,您必須創建兩個處理權限所需的函數,即has_perm()has_module_perms()


2.創建自定義用戶管理器

現在下一步是創建一個自定義用戶管理器,這是 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

3.設置用戶Model

Go 到您的 settings.py 並添加一個AUTH_USER_MODEL屬性,指定 model Django 應該使用哪個用戶。

AUTH_USER_MODEL = 'appName.Profiles'

4. 進行遷移

要提交上面所做的更改,必須通過運行進行遷移

python manage.py makemigrations

5.從REST API注冊用戶

由於我們已經創建了 model,那么我們只需要創建序列化程序、視圖和 url。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM