I finally found the solution. After debugging in the internal django classes. The solution is embarrassingly simple.
user = authenticate(username=form.cleaned_data['email'], password=form.cleaned_data['password2'])
login(request, user)
My mistake was the wrong namespace for login(request, user)
Make sure you are using
from django.contrib.auth import login
And not by mistake:
from django.contrib.auth.views import login
everything else was correct in my settings.