当前位置: 首页 > 面试题库 >

使用错误凭据的Django登录返回200而不是401

嵇丰
2023-03-14
问题内容

这是一个非常简单的测试,但我似乎无法正确完成。

我想检查哪些用户可以登录并执行操作(这是一整套测试的一部分),但是第一步会引起一些问题。

class SuperUserTest(TestCase):
    def setUp(self):
        self.client = Client()
        self.su = User.objects.create_superuser('super','','the_correct_password')
    def test_su_can_login(self):
        response = self.client.post(reverse('django.contrib.auth.views.login'),
            {'username': 'super', 'password': 'the_wrong_password'})
        self.assertEqual(response.status_code,401)

        # Success redirects to the homepage, so its 302 not 200
        response = self.client.post(reverse('django.contrib.auth.views.login'),
            {'username': 'super', 'password': 'the_correct_password'})
        self.assertEqual(response.status_code,302)

当我运行测试时,我得到:

(my_app)00:20 ~/my_app (master)$ ./manage.py test my_app.SuperUserTest
Creating test database for alias 'default'...
F
======================================================================
FAIL: test_su_can_login (my_app.SuperUserTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "./my_app/tests.py", line 341, in test_su_can_login
    self.assertEqual(response.status_code,401)
AssertionError: 200 != 401

----------------------------------------------------------------------
Ran 1 test in 1.180s

FAILED (failures=1)
Destroying test database for alias 'default'...

为什么200我不正确登录时django返回HTTP代码?

对于其他上下文,这是我如何管理登录/注销URL:

urlpatterns = patterns('',
    # Examples:
    url(r'^accounts/login/?$', 'django.contrib.auth.views.login'),
    url(r'^accounts/logout/?$', 'django.contrib.auth.views.logout',
        {'next_page': '/'}),

问题答案:

Web社区中有一些关于对凭证失败的正确响应的辩论。例如,这是有关从切换到的Wordpress凭单。在Stack
Overflow上,您可以找到一些建议和一些建议。200``401``401

Django选择返回一个200响应以及重新渲染的表单。

我认为这是正确的方法。一个401403响应表明用户无权访问该资源(URL)。但是在这种情况下,资源是登录点,并且您 不需要
凭据即可访问该资源。根据定义,它对所有用户可用。因此,从本质上讲,这种情况与任何其他表单验证没有区别-
服务器正在检查发送的输入,如果输入无效,它将返回200响应以及表单和错误消息。



 类似资料:
  • 我是Spring Security的新手,我做了以下教程:https://windoctor7.github.io/spring-jwt.html 但是我修改了一些数据库中搜索用户的代码,所以,我创建了一个@bean: 1部分,拦截呼叫。 我拦截“登录”并在数据库中搜索用户是否存在: } 用户是正确的,最后一行: 我在AbstractAuthenticationProcessingFilter中遇

  • 你好我按照这个教程:http://symfony.com/doc/current/cookbook/security/entity_provider.html My security.yml: 在数据库中,我有: 用户: 角色: 用户角色: 每次我尝试用DB中的一个用户登录时,我都会得到“坏凭据”。但是,如果我使用内存中定义的“test”用户登录,没有问题 我想这是我的安全问题。但我做错了什么?

  • 我有一个名为Backend(端口:9090)的服务,位于Zuul(端口:8080)后面。 浏览器在Zuul上调用GET方法,执行重定向。 示例调用:http://localhost:8080/testredirect 结果: 浏览器收到Http状态=200 浏览器URL:http://localhost:8080/testredirect 浏览器显示:Hello world 预期结果: 浏览器应接

  • 我试图通过spring boot学习Spring Security的基础知识,我创建了一个项目,其中还包括postgresql设置。Postgresql部分按预期工作。 问题是,在我通过正确的凭据访问安全endpoint后,我只是试图使用正确的用户名和错误的密码进行访问,并期待401错误,但返回200。并返回endpoint的内容。 如果我使用和进行基本身份验证请求,则响应为401 UnAutho

  • 问题内容: 我已经在我的网站上实现了Ajax请求,并且正在从网页调用端点。它总是返回 200 OK ,但是 jQuery 执行error事件。 我尝试了很多事情,但无法弄清问题所在。我在下面添加我的代码: jQuery代码 的C#代码 成功删除后,我需要该字符串。我可以删除内容,但是没有收到此消息。这是正确的还是我做错了什么?解决此问题的正确方法是什么? 问题答案: 尝试根据指定的参数或服务器发送

  • 我正在开发一个聊天应用程序,在该应用程序中,我必须从edittext设置登录Id密码凭据,根据响应,我必须进入更多屏幕。 当我静态使用凭据时,我从网络服务获得响应 但当我从EditText获取凭证时,它现在给了我适当的回应。