csrf_exempt无法与Django身份验证一起使用

卡洛

我正在制作移动应用程序的后端,并使用Django和Userena进行用户管理。我使用Django REST框架登录并注册,一切正常。我现在唯一需要做的就是实现“忘记密码”功能。我想使用Userena中已经实现的一个,但是即使使用了csrf_exemptdectorator后,我也无法摆脱错误“ CSRF令牌丢失或不正确” 我在做什么?

urls.py

from django.contrib.auth.views import password_reset
from django.views.decorators.csrf import csrf_exempt
...
urlpatterns = patterns(
    '',
    url(r'^password/mobile/reset/$',
       csrf_exempt(password_reset),
       {'template_name': 'userena/password_reset_form.html',
        'email_template_name': 'userena/emails/password_reset_message.txt',
        'extra_context': {'without_usernames': userena_settings.USERENA_WITHOUT_USERNAMES}
        },
       name='userena_password_mobile_reset'),
)

passowrd_reset_form.html

{% extends 'userena/base_userena.html' %}
{% load i18n %}

{% block title %}{% trans "Reset password" %}{% endblock %}

{% block content %}
<form action="" method="post">
  <fieldset>
    <legend>{% trans "Reset Password" %}</legend>
    {% csrf_token %}
    {{ form.as_p }}
  </fieldset>
  <input type="submit" value="{% trans "Send password" %}" />
</form>
{% endblock %}
sk1p

如果在发布到密码重置视图之前执行GET请求,则会在Cookie中获得CSRF令牌,然后可以在POST请求中发送该CSRF令牌。

如果您坚持要豁免视图:我认为问题在于CSRF保护应用于password_reset视图的方式。由明确装饰csrf_protect

有这个问题仔细一看,让我们假设original_password_reset_viewpassword_reset没有的csrf_protect基本上,您正在这样做:

csrf_exempt(csrf_protect(original_password_reset_view))
# ^^ your code
#           ^^ the decorator in django.contrib.auth.views

加上的效果CsrfViewMiddleware,我们得到的等价于

csrf_protect(csrf_exempt(csrf_protect(original_password_reset_view)))

csrf_protect仅仅是一个中间件出身的装饰CsrfViewMiddlewarecsrf_exempt另一方面,只是简单地设定csrf_exempt=True其论点。因此,由外部表示的中间件会在视图上csrf_protect看到该csrf_exempt=True值,并禁用其CSRF投影。它否定了外部 csrf_protect因此,我们有:

csrf_protect(original_password_reset_view)

该视图仍受保护。基本上,没有理智的方法。(一种疯狂的方式:编写request.csrf_processing_done = True为该特定URL设置的中间件。不要这样做...)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

IDP启动的SAML登录错误-身份验证语句太旧,无法与value一起使用

来自分类Dev

无法与NancyFX一起使用基于令牌的身份验证

来自分类Dev

身份验证筛选器无法与Web API中的授权筛选器一起使用

来自分类Dev

Git github无法与谷歌身份验证器OSX一起使用

来自分类Dev

无法与NancyFX一起使用基于令牌的身份验证

来自分类Dev

Gmail api身份验证无法与javascript一起使用

来自分类Dev

Spring Security oauth / form身份验证和CSRF-它们可以一起使用吗?

来自分类Dev

使用会话身份验证,通过cursing与Tasty Pie一起进行身份验证

来自分类Dev

与Keepass + Putty一起使用SSH密钥身份验证时的sudo身份验证

来自分类Dev

@csrf_exempt无法用于Rest API

来自分类Dev

Firebase和angularFire-从Google身份验证获取电子邮件可与$ authWithOAuthPopup一起使用,但无法与$ authWithOAuthRedirect一起使用

来自分类Dev

Firebase和angularFire-从Google身份验证获取电子邮件可与$ authWithOAuthPopup一起使用,但无法与$ authWithOAuthRedirect一起使用

来自分类Dev

无法将Box API Enterprise API与OAuth2身份验证的应用程序一起使用

来自分类Dev

扩展asp.net身份OWIN身份验证框架以与Amazon DynamoDb一起使用

来自分类Dev

cURL可以将存储的身份验证详细信息与DIGEST身份验证一起使用吗?

来自分类Dev

Laravel 5.2多表身份验证和中间件一起无法正常工作

来自分类Dev

Laravel 5.2多表身份验证和中间件一起无法正常工作

来自分类Dev

Passport-jwt身份验证无法与node-jwt-simple一起正常工作

来自分类Dev

无法在 axios 中与 bodyFormData 一起传递身份验证标头

来自分类Dev

Javascript-将window.open()与基本身份验证一起使用

来自分类Dev

在Play 2.2.1 Framework中将BodyParser与经过身份验证的请求一起使用

来自分类Dev

将Backup-SqlDatabase cmdlet与SQL Server身份验证一起使用

来自分类Dev

可以将JMeter与摘要身份验证一起使用吗?

来自分类Dev

password.js中的身份验证,与angular js一起使用

来自分类Dev

将角色与表单身份验证一起使用

来自分类Dev

在NodeJS后端中将JWT与Active Directory身份验证一起使用

来自分类Dev

如何修改laravel中间件以与Firebase身份验证一起使用

来自分类Dev

两因素身份验证如何与随机数一起使用?

来自分类Dev

Firebase意外保留了匿名身份验证,可与onAuthStateChanged一起使用

Related 相关文章

  1. 1

    IDP启动的SAML登录错误-身份验证语句太旧,无法与value一起使用

  2. 2

    无法与NancyFX一起使用基于令牌的身份验证

  3. 3

    身份验证筛选器无法与Web API中的授权筛选器一起使用

  4. 4

    Git github无法与谷歌身份验证器OSX一起使用

  5. 5

    无法与NancyFX一起使用基于令牌的身份验证

  6. 6

    Gmail api身份验证无法与javascript一起使用

  7. 7

    Spring Security oauth / form身份验证和CSRF-它们可以一起使用吗?

  8. 8

    使用会话身份验证,通过cursing与Tasty Pie一起进行身份验证

  9. 9

    与Keepass + Putty一起使用SSH密钥身份验证时的sudo身份验证

  10. 10

    @csrf_exempt无法用于Rest API

  11. 11

    Firebase和angularFire-从Google身份验证获取电子邮件可与$ authWithOAuthPopup一起使用,但无法与$ authWithOAuthRedirect一起使用

  12. 12

    Firebase和angularFire-从Google身份验证获取电子邮件可与$ authWithOAuthPopup一起使用,但无法与$ authWithOAuthRedirect一起使用

  13. 13

    无法将Box API Enterprise API与OAuth2身份验证的应用程序一起使用

  14. 14

    扩展asp.net身份OWIN身份验证框架以与Amazon DynamoDb一起使用

  15. 15

    cURL可以将存储的身份验证详细信息与DIGEST身份验证一起使用吗?

  16. 16

    Laravel 5.2多表身份验证和中间件一起无法正常工作

  17. 17

    Laravel 5.2多表身份验证和中间件一起无法正常工作

  18. 18

    Passport-jwt身份验证无法与node-jwt-simple一起正常工作

  19. 19

    无法在 axios 中与 bodyFormData 一起传递身份验证标头

  20. 20

    Javascript-将window.open()与基本身份验证一起使用

  21. 21

    在Play 2.2.1 Framework中将BodyParser与经过身份验证的请求一起使用

  22. 22

    将Backup-SqlDatabase cmdlet与SQL Server身份验证一起使用

  23. 23

    可以将JMeter与摘要身份验证一起使用吗?

  24. 24

    password.js中的身份验证,与angular js一起使用

  25. 25

    将角色与表单身份验证一起使用

  26. 26

    在NodeJS后端中将JWT与Active Directory身份验证一起使用

  27. 27

    如何修改laravel中间件以与Firebase身份验证一起使用

  28. 28

    两因素身份验证如何与随机数一起使用?

  29. 29

    Firebase意外保留了匿名身份验证,可与onAuthStateChanged一起使用

热门标签

归档