正如我们在不同的网站上看到的,在注册后它会在我们的电子邮件中发送6/5字符的激活码。我们使用该激活码来激活我们的帐户。 我试图做同样的事情,但无法弄清楚如何在django-rest-framework中做到这一点
目前,我正在使用Djoser进行注册和激活。 Djoser在电子邮件中发送激活URL并且工作正常。 如何通过6个字母数字字符的激活码替换激活URL以进行帐户激活?
使用: Django的REST的框架, Django的REST的Fraework,智威汤逊, Djoser
答案 0 :(得分:1)
不是创建随机值,而是编码一些唯一的用户数据并将其附加到网址。像这样
import jwt
data = {'email' : "test@test.com"} # Some unique field for reference
secret_key = "test"
algorithm = "HS256" # You can use MD5 or whatever you want
jwt.encode(data, secret_key, algorithm)
点击邮件激活网址后,您可以解码并验证数据库中的唯一字段。为此,您不希望将代码保存在DB中。这是我的建议
答案 1 :(得分:1)
我在项目中使用了以下内容的变体:
# models.py
import random
from django.conf import settings
from django.db import models
def generate_activation_code():
return ''.join(random.choice(string.ascii_uppercase + string.digits) for x in range(6))
class ActivationCode(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.PROTECT)
code = models.CharField(max_length=6, default=generate_activation_code)
# views.py
from django.http import Http404
def register_user(request):
# create your `new_user` however you see fit
code = ActivationCode.objects.create(user=new_user)
send_mail(
'Activate Your Account',
'Here is the activation code: %s' % code,
'from@example.com',
[user.email]
)
render(request, 'activation_sent.html')
def check_activation_code(request, code):
try:
ActivationCode.objects.get(code=code)
# ... All set, activate & login the user, & delete the activation code
except ActivationCode.DoesNotExist:
raise Http404
return render(request, 'welcome.html')
增强功能可以包括向您在视图中签入的ActivationCode
添加到期日期,和/或为清除旧代码添加管理工作。
答案 2 :(得分:0)
您可以生成6位数的随机数:
import random
codeval = random.randint(111111,999999)
并通过电子邮件发送。并且您可以保持与随机数完全相同的副本。而当用户将给他的号码。您可以将其与存储的匹配。如果匹配则您将激活用户配置文件。