5

我在 Django REST 框架中的令牌身份验证遇到了一些问题。从文档中我知道这是实现以下内容的问题:

from rest_framework.authtoken.models import Token

token = Token.objects.create(user=...)
print token.key

现在我的问题是,Token.objects.create(user=...). 这里的答案有帮助,它说这将提供一个外键给用户的令牌模型。我不确定我是否理解这一点。

我有自己的用户模型,定义如下:

class Users(models.Model):
    userid = models.IntegerField(primary_key=True)
    username = models.CharField(max_length=255L, unique=True, blank=True)
    email = models.CharField(max_length=255L, unique=True, blank=True)
    password = models.CharField(max_length=64L, blank=True)
    registeredip = models.CharField(max_length=255L, blank=True)
    dob = models.DateField(null=True, blank=True)
    firstname = models.CharField(max_length=255L, blank=True)
    lastname = models.CharField(max_length=255L, blank=True)
    joindate = models.DateTimeField()

    class Meta:
        db_table = 'Users'

在这种情况下,我将如何为满足某些条件的用户创建令牌?

# View Pseudocode
from rest_framework.authtoken.models import Token

def token_request(request):
    if user_requested_token() and token_request_is_warranted():
        new_token = Token.objects.create(user=request.user) #What goes here?

任何帮助或导致更多文档/示例的信息都会真正帮助我。谢谢!

4

1 回答 1

2

可以肯定的是:我们正在谈论由 django rest 框架提供的令牌身份验证?

如果是这样,这是一个非常简单的方法,其中使用了一个令牌(随机 40 个字符)来代替用户名和密码。

DRF 提供的是一个表 ( Token),您需要在其中为您的用户创建条目,Token引用您的用户模型(内置或活动自定义模型)。

最初没有创建令牌,您需要创建它们。

有几种方法可以创建令牌,最常见的是:

  • 使用信号处理程序为所有用户创建令牌(创建时)
  • 在后台任务中创建令牌(例如管理任务,不时运行并创建丢失的令牌)
  • 有一个特殊的 api 端点,它将按需创建令牌,并使用其他用户身份验证方法来授权用户

基本上这意味着,您需要在代码中的某个地方创建Token实例,引用您的用户实例。

Token(user=user).save()

现在,几点说明:

  • 令牌的这种实现相当初级,例如,您没有任何选项可以使令牌过期,唯一的方法是重新生成令牌 - 如果您想要过期会话和/或多个客户端,这可能会出现问题(请记住 - 每个用户一个令牌,而不是浏览器/会话/设备)
  • 令牌是使用较差的随机函数创建的
  • 令牌以纯文本形式存储在数据库中
  • 有多个包可以提供更好、更安全的令牌实现,最先进的是django-rest-framework-jwtdjango-rest-knox(第二个更简单)

ps python 类名应该是单数(Users->User)

于 2016-06-13T10:24:01.853 回答