Skip to main content
 首页 » 编程设计

python之为非用户对象django rest框架创建授权 token

2024年10月01日40yyy_WW

我正在寻找为非用户对象生成一个 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 的真实用户。如果您很小心,那么这可能不是什么大问题,但您需要开始实现以确定它对您有何影响。