首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >注册后通过电子邮件发送激活码,而不是URL

注册后通过电子邮件发送激活码,而不是URL
EN

Stack Overflow用户
提问于 2018-01-05 11:39:40
回答 3查看 2.2K关注 0票数 3

正如我们在不同的网站上看到的,在用户注册后,它会向用户的电子邮件发送一个6/5字符的激活码。用户应提交代码在网站上激活他们的帐户。我也在尝试做同样的事情,但是不知道如何使用djoser在django-rest-framework中做到这一点。

目前,我正在使用Djoser进行注册和激活。Djoser在电子邮件中发送激活URL;当点击时激活帐户,它工作正常。

如何才能向用户发送用于激活的6个字符的字母数字代码,而不是发送整个URL?

我正在使用: django-rest-framework,django-rest-framework-jwt,djoser

EN

回答 3

Stack Overflow用户

发布于 2019-07-26 00:29:44

我在项目中使用了以下内容的变体:

代码语言:javascript
运行
复制
# 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
EN

Stack Overflow用户

发布于 2018-01-05 17:41:11

不是创建一个随机值,而是编码一些唯一的用户数据并将其附加到url。像这样

代码语言:javascript
运行
复制
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中。这是我的建议

票数 1
EN

Stack Overflow用户

发布于 2018-01-05 12:00:02

您可以生成6位随机数:

代码语言:javascript
运行
复制
import random  
codeval = random.randint(111111,999999)

并通过电子邮件发送。你可以保持与随机数完全相同的副本。以及用户何时会给出他的号码。你可以把它和存储的匹配起来。如果匹配,您将激活用户配置文件。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48106907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档