如何测试身份验证?

时间:2014-10-24 09:34:06

标签: python django

请帮助编写测试认证。

提交表单后,在我的网站上

用户输入到达带有模板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

2 个答案:

答案 0 :(得分:0)

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

因此csrfmiddlewaretoken是用户的唯一值。

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

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

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

答案 1 :(得分:0)

也许是这样的:

# 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)