7

Я пытаюсь создать api с аутентификацией токена. Моя проблема заключается в том, что я не хочу, чтобы токены были связаны с учетными записями пользователей, а скорее с моделью учетной записи.Непользовательская база TokenAuthentication для django-rest-framework

Например:

class Account(models.Model): 
    slug =  models.SlugField() 
    name =  models.CharField(max_length=255) 
    website = models.URLField(blank=True, default='') 
    members = models.ManyToManyField(User, through='AccountMember') 

class AccountMember(models.Model): 
    ADMIN  = 1 
    MANAGER  = 2 
    MEMBER  = 3 
    ROLES = (
     (ADMIN,  'administrator'), 
     (MANAGER, 'manager'), 
     (MEMBER, 'member'), 
    ) 
    user =   models.ForeignKey(User) 
    account =  models.ForeignKey(Account) 
    role =   models.PositiveSmallIntegerField(choices=ROLES) 
    date_joined = models.DateField(auto_now_add=True) 

class Token(models.Model): 
    """ 
    The default authorization token model. 
    """ 
    key = models.CharField(max_length=40, primary_key=True) 
    account = models.ForeignKey(Account, related_name='auth_tokens') 
    only_allowed_ips = models.BooleanField(default=False) 
    ip_list = models.TextField(default='', blank=True) 
    created = models.DateTimeField(auto_now_add=True) 

Как вы можете видеть, Есть несколько пользователей, связанных с учетной записью такого назначения фишки им было бы бесполезно.

Я также хочу, чтобы добавить несколько токенов в учетную запись.

Кто-нибудь знает, как я мог бы добавить аутентификацию/разрешения для такой системы?

ответ

1

Вы должны повторить следующие классы:

django.contrib.auth.backends.ModelBackend: для проверки аутентификации и разрешений django.contrib.auth.middleware.AuthenticationMiddleware: установить ваш аккаунт связан с запросом

вероятно, вы должны создать другой django.contrib.auth.models.Permission для хранения разрешений, связанные с учетной записью

1

Я просто сталкивался с проблемой сам. То, что я решил сделать, - это дублировать django rest framework модуль authtoken в моем приложении и применить собственные изменения.

Вы можете скопировать папку из репозитория DRF в папку своего собственного приложения. Обязательно измените соответствующие поля в вашем settings.py, применение/authtoken/admin.py и, конечно, в вашем приложения/authtoken/models.py

Смежные вопросы