【问题标题】:How to add field in Token Model in Django Rest Framework Authtoken如何在 Django Rest Framework Authtoken 的令牌模型中添加字段
【发布时间】:2016-10-06 19:11:57
【问题描述】:
我正在使用 rest_framework.authtoken.models 令牌。我可以看到 3 个字段,它们是 key,created_at 和 user_id。
应用背景:
我使用 chrome 应用程序作为应用程序的客户端,我想使用令牌身份验证来连接我在 django rest 框架中的 API。我想将 user_id 和 company_id 存储在 authtoken_token 表中。所以我可以只将令牌密钥存储在 chrome app localstorage 中,
我的问题是如何向该模型添加像 company_id 这样的额外字段?我找不到任何关于此的文档或文章。
我还在 this article 中回答了 Jamie 对模型的子类化,但我不知道如何。
谢谢!
【问题讨论】:
标签:
django
django-rest-framework
django-rest-auth
【解决方案1】:
定义您自己的身份验证方法:
设置.py
'DEFAULT_AUTHENTICATION_CLASSES': (
'my_project.my_app.authentication.myOwnTokenAuthentication',
),
身份验证.py
from rest_framework.authentication import TokenAuthentication
from my_project.my_app.models.token import MyOwnToken
class MyOwnTokenAuthentication(TokenAuthentication):
model = MyOwnToken
模型.py
import binascii
import os
from django.db import models
from django.utils.translation import ugettext_lazy as _
from my_project.companies.models import Company
class MyOwnToken(models.Model):
"""
The default authorization token model.
"""
key = models.CharField(_("Key"), max_length=40, primary_key=True)
company = models.OneToOneField(
Company, related_name='auth_token',
on_delete=models.CASCADE, verbose_name="Company"
)
created = models.DateTimeField(_("Created"), auto_now_add=True)
class Meta:
verbose_name = _("Token")
verbose_name_plural = _("Tokens")
def save(self, *args, **kwargs):
if not self.key:
self.key = self.generate_key()
return super(MyOwnToken, self).save(*args, **kwargs)
def generate_key(self):
return binascii.hexlify(os.urandom(20)).decode()
def __str__(self):
return self.keyDefine you own authentication method: