[英]URL token authentication in Django
我正在尋找一種方法,我可以向用戶發送一封帶有網址的電子郵件,該網址會將其記錄到用戶手中。 這甚至不一定要過期。 我在會議上找到了大量的材料,但這不是我追求的。 我需要的是這個:
那里有什么我想念的東西可以幫助我,還是我必須實施自己的解決方案? 我可能只是包含來自Django REST框架的令牌的令牌嗎?
感謝您抽出寶貴時間閱讀我的問題。
我正在使用Django 1.9和Python 2.7
我不認為使用url get-parameters對用戶進行身份驗證。 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')
更新
或者你可以使用這個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')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.