Как добавить 2 разных логина для разных пользователей в Django Rest Framework? - PullRequest
0 голосов
/ 18 января 2020

Я хочу создать приложение с двумя типами пользователей

Обычные пользователи, которые будут входить в приложение и использовать его

Администратор Пользователи, которые будут входить в приложение для управления ресурсами

Я знаю, я мог бы просто сделать поле is_staff, чтобы различать, является ли пользователь администратором или нет, но дело в том, что .... Обычный пользователь вообще не должен иметь пароль, он будет зарегистрирован через facebook / google api, но пользователям с правами администратора нужен пароль, и они не могут войти через свои учетные записи google.

Итак, я создал модель пользователя, подобную этой

""" User model."""

# Django
from django.db import models
from django.contrib.auth.models import AbstractUser

# Utilities
from api.utils.models import BaseModel

class User(BaseModel, AbstractUser):
   """ User model. """

   email = models.EmailField(
       'email address',
       unique=True,
       error_messages={
           'unique': 'A user with that email already exists.'
       }
   )

   facebook_id = models.CharField(blank=True, max_length=255)

   google_id = models.CharField(blank=True, max_length=255)

   USERNAME_FIELD = 'email'
   REQUIRED_FIELDS = []

   class Meta:
       db_table = 'users'

   def __str__(self):
       """ Return email"""
       return self.email

   def get_short_name(self):
       """ Return email"""
       return self.email

Теперь я сделал нечто подобное для Пользователь Admin

""" Admin User model."""

# Django
from django.db import models
from django.contrib.auth.models import AbstractUser

# Utilities
from api.utils.models import BaseModel

class Admin(BaseModel, AbstractUser):
   """ Admin model. """

   email = models.EmailField(
       'email address',
       unique=True,
       error_messages={
           'unique': 'A admin with that email already exists.'
       }
   )

   password = models.CharField(max_length=255)

   USERNAME_FIELD = 'email'
   REQUIRED_FIELDS = ['password']

   class Meta:
       db_table = 'admin_users'

   def __str__(self):
       """ Return email"""
       return self.email

   def get_short_name(self):
       """ Return email"""
       return self.email

в основном то же самое, но с паролем вместо facebook_id / google_id

Теперь я хочу знать, прежде чем идти дальше, возможно ли это или я просто собираюсь sh к стене? Есть ли лучший способ сделать это? также, как я мог управлять аутентификацией в этом случае?

...