Django - Невозможно проверить запрос как аутентифицированный пользователь с django -allauth - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть новый проект Django (версия 2.2), пользовательская модель пользователя и django-allauth для управления регистрацией пользователей (не через социальные сети, только с подтверждением по электронной почте), и я пытаюсь протестировать некоторые защищенные представления.

В методе теста setUp я создаю нового пользователя и создаю нового EmailAddress (из allauth.account.models) с verified и primary, установленными на True.

Далее я пытаюсь войти с помощью: self.client.login(username=username, password=password), и я получаю True, поэтому все работает до сих пор, и пользователь вошел в систему.

Если я пытаюсь просмотреть что-либо, требующее входа, я получаю 301 перенаправить на страницу входа в систему.

Вот мой код:

создание пользователя в setUp

username = 'test@test.com'
password = 'testtesttest'

new_user = User.objects.create_user(
    username=username,
    email=username,
    password=password,
    )
new_user.save()
new_user.is_active = True
new_user.save()

new_email_address = EmailAddress(
    user_id=new_user.id,
    email=username,
    verified=True,
    primary=True,
    )
new_email_address.save()

вход и проверка входа в систему

logged_in = self.client.login(email=username, password=password)
self.assertTrue(logged_in)  # and this works as expected

Теперь, если я попытаюсь запросить представление, требующее входа в систему:

response = self.client.get("/protected")

Я получу <HttpResponsePermanentRedirect status_code=301, "text/html; charset=utf-8", url="/protected/">

Что я пропускаю или делаю неправильно?

1 Ответ

0 голосов
/ 11 февраля 2020

Переадресация, которую вы показываете, фактически показывает вам URL, на который он перенаправляет: url="/protected/". Таким образом, вы не перенаправлены на страницу входа в систему.

Обратите внимание, что обычным перенаправлением будет 302 (временное перенаправление), тогда как здесь вы видите постоянное перенаправление, 301.

Любой запрос правильного url (self.client.get('/protected/')) или выполните переадресацию: self.client.get('/protected', follow=True). Таким образом, ваш ответ будет для последней страницы, и вы сможете проверить, соответствует ли его содержание тому, что вы ожидаете.

...