为非用户对象django rest框架创建auth令牌

时间:2017-09-07 22:11:38

标签: python django api django-rest-framework token

我希望为非用户对象生成一个django authtoken。以前我很容易为像这样的用户对象生成auth令牌

email = request.data.get('email')
user = User.objects.get(email=email)
Token.objects.create(user=user)

但如果我为非用户对象尝试此操作,则不会生成它。

device_id = request.data.get('device_id')
tablet = Table.objects.get(device_id=device_id)
Token.objects.create(user=tablet)

这里的Table是包含各种device_ids的简单模型。

我只想为每个平板电脑生成一个身份验证令牌,就像我们为每个用户一样。

1 个答案:

答案 0 :(得分:2)

如果您设备链接到用户,并且每个设备需要一个""如果用户具有单独登录的> 1设备(例如桌面设备,平板电脑,手机等)以及可以撤销令牌的令牌,请查看Knox应用:

Django Knox (https://github.com/James1345/django-rest-knox)

否则,身份验证令牌通常用于登录用户。如果您没有用户,那么就标准基础架构而言,它们并没有多大用处。

如果您想要自定义内容,那么您必须编写自己的解决方案,其中可能包括:

  • 自定义中间件,如果:
    • 您希望/需要设置request.device=,例如request.user
    • 您想要一个自定义用户对象(下方)
  • 决定你是否想要一个"假的"像DeviceUser这样的用户
    • 实施用户界面(请参阅AnonymousUser'示例)
    • has_authenticated = True
    • 有权限(?)
    • 有is_device_user = True,因此您可以区分
  • 要非常小心,不要依赖request.user拥有user_id
  • 可能是新的Permission类(例如新的IsAuthenticated

我看到的主要问题是期望非匿名用户对象(在request中)成为具有pk的真实用户。如果你小心,那么这可能不是一个大问题,但是你需要开始实施以确定它对你的影响。