AnonymousUser с помощью django.test.client.login () - PullRequest
0 голосов
/ 25 октября 2018

Я тестирую функцию входа в систему.

def setUpClass(cls):
    super(BasePage_loggedin, cls).setUpClass()
    cls.selenium = WebDriver()
    cls.client = Client()
    cls.user_1 = MyUser.objects.create_user(username='myself',password='12345')
    cls.client.login(username=cls.user_1.username, password=cls.user_1.password)

    # create session cookie:
    session = SessionStore()
    session[SESSION_KEY] = cls.user_1.pk
    session[BACKEND_SESSION_KEY] = settings.AUTHENTICATION_BACKENDS[0]
    session[HASH_SESSION_KEY] = cls.user_1.get_session_auth_hash()
    session.save()

    # Finally, create the cookie dictionary
    cookie = {
        'name': settings.SESSION_COOKIE_NAME,
        'value': session.session_key,
        'secure': False,
        'path': '/',
    }
    # add the session cookie
    cls.selenium.get('{}'.format(cls.live_server_url))
    cls.selenium.add_cookie(cookie)
    cls.selenium.refresh()
    cls.selenium.get('{}'.format(cls.live_server_url))

Так что я могу пропустить страницу входа, но затем, когда я делаю request.user, чтобы проверить данные для этого пользователя, это AnonymousUser

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Пожалуйста, проверьте свои settings.py и попробуйте коды ниже.

REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES': (
            'rest_framework.authentication.SessionAuthentication', # needed only up to the test env
            'rest_framework.authentication.TokenAuthentication',
        )
    }
0 голосов
/ 29 октября 2018

Когда вы создаете пользователя таким образом - я считаю, что это связано с паролем.Установка пароля для такой строки не делает то, что вы думаете сделали бы.

Вы можете создать такого пользователя, а затем добавить его после создания пользователя, но до входа в систему.:

cls.user_1.set_password('12345')
cls.user_1.save()

Затем войдите в систему пользователя как-то так:

cls.client.login(username=cls.user_1.username, password='12345')

Я полагаю, что это связано с хешированием пароля или что-то в этом духе - это былов то время как я спотыкался с ним, но я помню, что у меня точно такая же проблема, как у вас.

Что-то вроде этого должно работать:

cls.selenium = WebDriver()
cls.client = Client()
cls.user_1 = MyUser.objects.create_user(username='myself',password='12345')
cls.user_1.set_password('12345')
cls.user_1.save()
cls.client.login(username=cls.user_1.username, password='12345')
...