正如我们在不同的网站上看到的,在用户注册后,它会向用户的电子邮件发送一个6/5字符的激活码。用户应提交代码在网站上激活他们的帐户。我也在尝试做同样的事情,但是不知道如何使用djoser在django-rest-framework中做到这一点。
目前,我正在使用Djoser进行注册和激活。Djoser在电子邮件中发送激活URL;当点击时激活帐户,它工作正常。
如何才能向用户发送用于激活的6个字符的字母数字代码,而不是发送整个URL?
我正在使用: django-rest-framework,django-rest-framework-jwt,djoser
发布于 2019-07-26 00:29:44
我在项目中使用了以下内容的变体:
# 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
添加到期日期,和/或清理旧代码的管理作业。
发布于 2018-01-05 17:41:11
不是创建一个随机值,而是编码一些唯一的用户数据并将其附加到url。像这样
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)
单击邮件激活url后,您可以解码并验证数据库中的唯一字段。为此,您不希望将代码保存在DB中。这是我的建议
发布于 2018-01-05 12:00:02
您可以生成6位随机数:
import random
codeval = random.randint(111111,999999)
并通过电子邮件发送。你可以保持与随机数完全相同的副本。以及用户何时会给出他的号码。你可以把它和存储的匹配起来。如果匹配,您将激活用户配置文件。
https://stackoverflow.com/questions/48106907
复制相似问题