我正在寻找为非用户对象生成一个 Django 授权 token 。以前我很容易为这样的用户对象生成身份验证 token
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)
这里的表是包含各种设备 ID 的简单模型。
我只想为每个平板电脑生成一个授权 token ,就像我们为每个用户所做的那样。
请您参考如下方法:
如果您要将设备链接到用户,并且在用户拥有 >1 台设备(例如台式机、平板电脑、手机等)的情况下需要“每台设备” token 单独登录并且可以撤销 token 的位置,然后查看 Knox 应用程序:
Django Knox (https://github.com/James1345/django-rest-knox)
否则,身份验证 token 通常用于登录用户。如果您没有用户,那么就标准基础架构而言,它们就没有多大用处。
如果您想要自定义的东西,那么您必须编写自己的解决方案,其中可能包括:
- 自定义中间件,如果:
- 你想要/需要设置
request.device=,比如request.user - 你想要一个自定义用户对象(如下)
- 你想要/需要设置
- 决定是否需要像
DeviceUser这样的“假”用户- 实现用户界面(参见
AnonymousUser的示例) - 有 is_authenticated=True
- 有权限(?)
- 有 is_device_user=True 这样你就可以区分
- 实现用户界面(参见
- 非常小心不要依赖于
request.user来获得 user_id - 可能是一个新的权限类(例如一个新的
IsAuthenticated)
我看到的主要问题是期望非匿名用户对象(在 request 中)是具有 pk 的真实用户。如果您很小心,那么这可能不是什么大问题,但您需要开始实现以确定它对您有何影响。
