Django正在创建非授权一次性访问令牌

2024-09-28 21:09:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个应用程序,在那里用户可以添加评论到特定的地方。在

我正在创建一个系统,在这个系统中,每次提交的评审都会被举行,并且会向站点经理发送一封电子邮件,他们可以通过单击两个不同的链接来批准或拒绝评审。在

这些链接将被映射到一个特定的Django视图函数,该函数将接收被批准/拒绝的特定评审的id和一个访问令牌,以确保链接的真实性。在

无论我在哪里搜索,都只能找到登录用户的“Auth tokens”,这不是我在本例中想要的。在

我想到的一种方法是创建一个review和command id的散列值,在数据库中存储一个关于这个令牌是否被访问的字段。但这个解决方案似乎并不“干燥”。在

有没有办法生成这些代币?在


Tags: django函数用户auth视图id应用程序站点
1条回答
网友
1楼 · 发布于 2024-09-28 21:09:02

Django附带了一个功能,您可以使用它:
https://docs.djangoproject.com/en/1.9/topics/signing/

如果我正确地理解了您的用例,您可以使用对象id作为要签名的值,然后创建一个接受签名值作为参数的视图,它可以从中派生id,同时确保链接是真实的。在

例如

from django.core import signing
from django.core.urlresolvers import reverse
from django.http import HttpResponseBadRequest
from django.shortcuts import get_object_or_404


signer = Signer()


def make_review_links(review_id):
    # a function to generate the links you can use in the email template
    signed = signer.sign(str(review_id))
    approve_link = reverse('approve_review', args=[review_id])
    reject_link = reverse('reject_review', args=[review_id])
    return approve_link, reject_link


def approve_review(request, signed):
    try:
        review_id = signer.unsign(value)
    except signing.BadSignature:
        return HttpResponseBadRequest("Invalid link")
    review = get_object_or_404(Review, pk=review_id)
    # approval code here

我确实同意评论人对你的问题,作为一个改变服务器上的数据的动作,这些应该是POST请求。模式与上面的相同,但是视图不是从url arg获取signed值,而是从request.POST获取它。你甚至可以用表格。在

显然,从电子邮件中发布帖子只有通过HTML电子邮件才有可能。要支持文本电子邮件,您应该链接到一个中间页面(传递签名值),该页面显示带有批准/拒绝按钮的表单,该页面应将签名值作为隐藏字段发布到如上所示的视图中。在

相关问题 更多 >