【问题标题】:how to test authentication?如何测试身份验证?
【发布时间】:2014-10-24 09:34:06
【问题描述】:

请帮助编写测试认证。

在我的网站上提交表单后,用户输入使用模板 rules.html 进入页面(通过正确输入用户名和密码),或者使用登录表单保持在同一页面上(如果不正确,用户名和密码)。

这是我测试的损坏版本:

class TestAuth(TestCase):
    def setUp(self):
        self.factory = RequestFactory()
        self.user = User.objects.create_user(username='zxcvbn', email='jacob@ru.ru', password='zxcvbn')

    def test_auth(self):
        response = self.client.post('/accounts/authentication/', {
            'csrfmiddlewaretoken:': ???????????????,
            'username': 'zxcvbn',
            'password': 'zxcvbn',
        })
        self.assertTemplateUsed(response, 'rules.html')     # ok auth

问题是不清楚从哪里获取值 csrfmiddlewaretoken

【问题讨论】:

  • 我不记得曾经需要担心 CSRF 以在上面显示的测试中测试登录。

标签: python django


【解决方案1】:

来自Django Docs: 所有传出的 POST 表单中都存在一个名为“csrfmiddlewaretoken”的隐藏表单字段。该字段的值为 CSRF cookie 的值。

所以 csrfmiddlewaretoken 对用户来说是唯一的价值。

登录/注销后更改。您可以通过从 cookie 进入使用 JQuery 检查当前用户:

document.cookie.match(/csrftoken=([\w]+)/)

(尝试在浏览器控制台中运行)

【讨论】:

    【解决方案2】:

    可能是这样的:

    # try to get page without auth
    response = self.client.get('/you/page/url/', follow=True)
    
    # check if redirected to login
    self.assertTrue('Log in' in response.content)
    
    # login
    self.client.login(username='user', password='pass')
    
    # try to get page with auth
    response = self.client.get('/you/page/url/')
    
    self.assertTrue('Rules' in response.content)
    

    【讨论】:

      猜你喜欢
      • 2013-02-21
      • 2022-01-04
      • 2015-11-04
      • 1970-01-01
      • 2021-06-19
      • 1970-01-01
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多