gpt4 book ai didi

python - Django REST Framework 授权 token

转载 作者:行者123 更新时间:2023-11-28 17:45:50 24 4
gpt4 key购买 nike

我在使用 Django REST Framework 中的 token 身份验证时遇到了一些问题。从文档中我知道这是实现以下内容的问题:

from rest_framework.authtoken.models import Token

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

现在我的问题是,Token.objects.create(user=...) 的参数到底是什么。答案here有帮助,它说这将提供一个 token 模型,该模型对用户来说是外键的。我不确定我是否理解这一点。

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

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'

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

# 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 框架提供的 Token 身份验证?

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

DRF 交付的是一个表格(Token),您需要在其中为您的用户创建条目,Token 引用您的用户模型(内置或事件自定义模型) .

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

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

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

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

Token(user=user).save()

现在,几点说明:

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

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

关于python - Django REST Framework 授权 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18416076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com