繁体   English   中英

Django REST框架验证令牌

[英]Django REST Framework Auth Token

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

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?

任何帮助或导致任何更多的文档/示例将真正帮助我在这里。 谢谢!

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

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

什么是DRF交付是一个表( Token ),您需要为您的用户创建条目, Token引用您的用户模型(内置或活动自定义模型)。

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

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

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

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

Token(user=user).save()

现在,几句话:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM