首页 > 解决方案 > 如何使用验证码对 Django 会话进行身份验证?

问题描述

我已经建立了一个网站和一个验证码。验证码由模型生成并显示在模板上。

意见

from resumesite.models import Chess_board
import json

def home(request):
    return render(request, 'home.html', {})

def chess(request):
    board = Chess_board()
    data = mark_safe(json.dumps(board.rep))
    return render(request, 'captcha_original.html',{'board': data})

我想将所有请求重定向到验证码,并在验证码完成后重定向到网站并允许在会话期间完全访问(即 20 分钟)。你会如何建议这样做?

选项

  1. 通过 ip 地址进行身份验证的中间件/装饰器(我已经阅读过,如果用户使用代理,这将不起作用)
  2. 自定义登录表单,带装饰器@login_required(login_url="/chess/")
  3. 与 REST 集成并使用令牌身份验证

标签: djangodjango-rest-frameworkdjango-formscaptchadjango-authentication

解决方案


您必须使用服务器端会话来处理访问。通过使用服务器端会话,您可以设置到期时间。在会话存储中,有一个名为 access=True 的变量,您可以在其他函数中检查它是否存在并提供页面。到期时间到达后,此会话将被删除,函数将看到 None 值。有关更多信息,请阅读以下文档 https://docs.djangoproject.com/en/3.0/topics/http/sessions/#configuring-the-session-engine


推荐阅读