Python Django中的URL令牌身份验证
我正在寻找一种方式,我可以发送给用户一个url的电子邮件,将他们登录到他们的用户。这甚至不一定要过期。我已经在会议上找到了大量的材料,但这不是我想要的。我需要的是:Python Django中的URL令牌身份验证,python,django,url,authentication,Python,Django,Url,Authentication,我正在寻找一种方式,我可以发送给用户一个url的电子邮件,将他们登录到他们的用户。这甚至不一定要过期。我已经在会议上找到了大量的材料,但这不是我想要的。我需要的是: 用户向网站提交一些内容 他们在后台做了一个记录 发送一封包含链接“site.com/&token=foobar23124123”的电子邮件 用户可以使用该链接登录(可选:下周) 有没有什么东西是我缺少的,可以帮助我的,还是我必须实施我自己的解决方案?我是否可以从Django REST框架的令牌中包含令牌 感谢您抽出时间阅读我的问
- 用户向网站提交一些内容
- 他们在后台做了一个记录
- 发送一封包含链接“site.com/&token=foobar23124123”的电子邮件
- 用户可以使用该链接登录(可选:下周)
我使用的是Django 1.9和Python 2.7,我不认为有什么东西可以使用url get参数对用户进行身份验证。AFAIK Django REST框架的令牌使用HTTP头作为令牌 您可以编写自己的auth后端,这非常简单。这里有一个例子 myproject/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')
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')