-1

我正在为使用Django Restframework的站点设置令牌认证,并且需要能够让用户下载他们的令牌,但是问题是他们只能够一次下载他们的令牌(类似于亚马逊AWS模型)。检查用户是否在Django Restframework中被分配了令牌

换句话说;有没有一种原生的方式来检查用户是否已在restframework中分配了一个令牌?

+2

到目前为止您尝试了什么? –

+0

我已经尝试通过查看文档来查看是否有任何其他Token.object函数,而不是创建和get_or_create,但无法找到任何东西。源潜水也没有给我任何东西。 我的目标是避免尝试使用原生解决方案失败的令牌授权的try catch块(尝试catch块方法存在太多可能的问题)。 – aeusman

回答

0

,你可以这样做:

from rest_framework.authtoken.models import Token 
from django.conf import settings 
token = Token.objects.create(user=settings.AUTH_USER_MODEL) 

现在你可以检查,如果你给用户有一个令牌:

user_with_token = Token.objects.get(user=user) 

,如果你只是想看看,如果用户有一个令牌:

is_tokened = Token.objects.filter(user=user).exist() # Returns a boolean 

如果条目存在,则意味着用户拥有分配给它的令牌。 参考:HERE

请按照该文档确保您的数据库已迁移。

+0

所以要检查这个我运行在一个shell;来自rest_framework.authtoken.models的 import Token; 来自django.conf的导入设置; #我创建了一个在django web admin中没有令牌的用户测试;您可以使用u = User.objects.get(username ='test'); user_token = Token.objects.get(user = u); <这返回一个DoesNotExist错误,我试图本质上捕捉 – aeusman

+0

过滤器完美的作品,谢谢! – aeusman

+0

我很乐意提供帮助 –

0

尝试使用django信号自动创建用户令牌,类似于您的模型文件。

@receiver(post_save, sender=User) 
def create_auth_token(sender, instance=None, created=False, **kwargs): 
if created: 
    Token.objects.create(user=instance) 
相关问题