68 votes

Vérifier que l'utilisateur s'est bien connecté

Comment puis-je tester qu'un utilisateur est connecté après avoir soumis le formulaire d'inscription ?

J'ai essayé ce qui suit mais cela renvoie True avant même d'avoir ajouté la logique de connexion à ma vue d'enregistrement.

def test_that_user_gets_logged_in(self):
    response = self.client.post(reverse('auth-registration'), 
                                { 'username':'foo', 
                                  'password1':'bar', 
                                  'password2':'bar' } )

    user = User.objects.get(username='foo')
    assert user.is_authenticated()

Le code qui est testé :

class RegistrationView(CreateView):
    template_name = 'auth/registration.html'
    form_class = UserCreationForm
    success_url = '/'

    def auth_login(self, request, username, password):
        '''
        Authenticate always needs to be called before login because it
        adds which backend did the authentication which is required by login.
        '''

        user = authenticate(username=username, password=password)
        login(request, user)

    def form_valid(self, form):
        '''
        Overwrite form_valid to login.
        '''

        #save the user
        response = super(RegistrationView, self).form_valid(form)

        #Get the user creditials
        username = form.cleaned_data['username']
        password = form.cleaned_data['password1']

        #authenticate and login
        self.auth_login(self.request, username, password)

        return response

0 votes

Avez-vous essayé response.request.user.is_authenticated() ?

1 votes

Je l'ai fait mais l'objet de la demande n'a pas d'objet utilisateur.

2voto

Anyany Pan Points 399

Il existe un autre moyen succinct, utilisant wsgi_request sur response :

response = self.client.post('/signup', data)
assert response.wsgi_request.user.is_authenticated()

et la manière de @Chronial est aussi disponible avec wsgi_request :

from django.contrib import auth
user = auth.get_user(response.wsgi_request)
assert user.is_authenticated()

Parce que response.wsgi_request a un session attribut.

Cependant, je pense qu'utiliser response.wsgi_request.user est plus simple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X