我不认为使用 url get-parameters 对用户进行身份验证。 AFAIK Django REST 框架的令牌使用 HTTP 标头作为令牌。
您可以编写自己的身份验证后端,这很容易。这是一个例子
我的项目/setting.py
AUTHENTICATION_BACKENDS = [
'myproject.backends.UrlTokenBackend',
'django.contrib.auth.backends.ModelBackend'
]
myproject/backends.py
class UrlTokenBackend(ModelBackend):
def authenticate(self, token):
try:
user = User.objects.get(token=token)
except User.DoesNotExist:
return None
if not user.is_active:
return None
return user
def get_user(self, user_id):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
现在,当您调用 authenticate 和 login 函数时,Django 将针对您的每个后端检查您的用户。您可以像这样手动登录用户(这是查看功能):
from django.contrib.auth import authenticate, login
def user_auth(request):
token = request.GET.get('token')
user = authenticate(token=token)
login(request, user)
return redirect('index')
更新
或者您可以使用 this hack 并仅执行此操作(无需自定义后端):
def user_auth(request):
token = request.GET.get('token')
user = User.objects.get(token=token)
user.backend = 'django.contrib.auth.backends.ModelBackend'
login(request, user)
return redirect('index')