【问题标题】:Secure URL/page for AnonUser to update a model field - Django Rest frameworkAnonUser 更新模型字段的安全 URL/页面 - Django Rest 框架
【发布时间】:2017-04-03 11:08:31
【问题描述】:

我有一个名为 Lead 的模型,它代表了我可能的 future_customer

为了更新此模型中名为 is_approved 的布尔字段,我将发送一封电子邮件到 Lead's 电子邮件 ID 以及 URL 并且此 URL 会将您带到我网站中要求批准的页面。

如何处理 Django Rest 框架 视图中的权限?没有与 Lead 模型关联的 django 用户,我不能使用任何与身份验证相关的类。

隐藏的 url 以及 AllowAny 权限是否足够好?

【问题讨论】:

    标签: django django-rest-framework django-users django-permissions email-verification


    【解决方案1】:

    在验证电子邮件的正常情况下,通常会为相应的电子邮件生成唯一令牌。然后当用户点击电子邮件时。他被带到一个页面,该页面可能存在表单提交,该表单提交到 POST 页面或直接验证。

    唯一的安全性是唯一的 ID 是唯一的,并且有人通过暴力生成这些 ID 的机会非常罕见。那是唯一的安全。您还可以添加过期时间,使链接仅在几天内有效。

    您找到与该邮件相关联的相应电子邮件,并相应地更新 is_approved 字段。

    您的模型和视图应如下所示。

    class Lead(models.Model):
        email = models.EmailField()
        unique_id = models.CharField(default=uuid.uuid4)
        is_approved = models.BooleanField(default=False)
    
        def get_absolute_url(self):
            return reverse('lead_verification', kwargs={'unique_id': self.unique_id})
    
    
    class LeadVerificationView(APIView):
    
        def post(self, unique_id):
            lead = Lead.objects.get(unique_id=unique_id)
            lead.is_approved = True
            lead.save()
    

    【讨论】:

    • Bipul,事实上我最终就是这么做的。我查看了 Djoser 的 activation_email 代码,除了 url 中的 uuid 之外,他们没有其他安全措施。还是谢谢。
    • @pnhegde 希望它仍然回答了你的问题。赞成、接受和关闭。 :)
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2015-12-15
    • 2015-01-28
    • 2020-09-29
    • 2017-12-28
    相关资源
    最近更新 更多