Get user object from token string in DRF?

后端 未结 5 880
说谎
说谎 2021-02-09 16:01

I have a token string from Django REST Framework\'s TokenAuthentication.

I need to get the corresponding user object. How would I go about doing this?

5条回答
  •  心在旅途
    2021-02-09 16:45

    Here is The default authorization token model:

    @python_2_unicode_compatible
    class Token(models.Model):
        """
        The default authorization token model.
        """
        key = models.CharField(_("Key"), max_length=40, primary_key=True)
        user = models.OneToOneField(
            settings.AUTH_USER_MODEL, related_name='auth_token',
            on_delete=models.CASCADE, verbose_name=_("User")
        )
        created = models.DateTimeField(_("Created"), auto_now_add=True)
    
        class Meta:
            # Work around for a bug in Django:
            # https://code.djangoproject.com/ticket/19422
            #
            # Also see corresponding ticket:
            # https://github.com/encode/django-rest-framework/issues/705
            abstract = 'rest_framework.authtoken' not in settings.INSTALLED_APPS
            verbose_name = _("Token")
            verbose_name_plural = _("Tokens")
    
        def save(self, *args, **kwargs):
            if not self.key:
                self.key = self.generate_key()
            return super(Token, self).save(*args, **kwargs)
    
        def generate_key(self):
            return binascii.hexlify(os.urandom(20)).decode()
    
        def __str__(self):
            return self.key
    

    As you can see this model has OneOnOne relations with the User model.

    So if you want to get the User than mapped to specific Token:

    from rest_framework.authtoken.models import Token
    
    try:
        Token.objects.get(key="token").user
    except Token.DoesNotExist:
        pass
    

    For more information see Authentication documents

提交回复
热议问题