Django REST 框架身份验证令牌

gee*_*hic 5 python django rest

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

from rest_framework.authtoken.models import Token

token = Token.objects.create(user=...)
print token.key
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,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'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如何为满足特定条件的用户创建令牌?

# 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?
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*zyk 3

可以肯定的是:我们正在谈论 django Rest 框架提供的 Token 身份验证?

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

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

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

创建令牌的方法有多种,最常见的是:

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

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

Token(user=user).save()
Run Code Online (Sandbox Code Playgroud)

现在,几点评论:

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

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