Python 我可以使用django Nonl和自定义身份验证后端吗?

Python 我可以使用django Nonl和自定义身份验证后端吗?,python,google-app-engine,django-nonrel,django-authentication,Python,Google App Engine,Django Nonrel,Django Authentication,我正试图用django Nonl使用自定义后端进行用户授权(电子邮件地址代替用户名,没什么特别的),但它不起作用。对authenticate()的所有调用均不返回任何值。这是我的后端: from django.contrib.auth.models import User, check_password class EmailAuthBackend(object): """ Email Authentication Backend Al

我正试图用django Nonl使用自定义后端进行用户授权(电子邮件地址代替用户名,没什么特别的),但它不起作用。对
authenticate()
的所有调用均不返回任何值。这是我的后端:

from django.contrib.auth.models import User, check_password

    class EmailAuthBackend(object):
        """
        Email Authentication Backend

        Allows a user to sign in using an email/password pair rather than
        a username/password pair.
        """
        supports_anonymous_user = False
        supports_object_permissions = True


        def authenticate(self, email=None, password=None):
            """ Authenticate a user based on email address as the user name. """
            try:
                user = User.objects.get(email=email)
                if user.check_password(password):
                    return user
            except User.DoesNotExist:
                return None

        def get_user(self, user_id):
            """ Get a User object from the user_id. """
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None
def authenticate(self, username=None, email=None, password=None):
        """ Authenticate a user based on email address as the user name. """
        if username:
            might_be_email = username
        elif email:
            might_be_email = email
以及视图(我正在尝试在用户注册后立即登录)<代码>新用户始终为无:

def create_new_user(request):
    if request.method == 'POST':
        data = request.POST.copy()
        data['username'] = ''.join([choice(letters) for i in xrange(30)])
        data['password'] = data['password1']
        form = CustomUserCreationForm(data)
        if form.is_valid(): 
            user = form.save(commit=False)
            # user must be active for login to work
            user.is_active = True
            user.save() #not sure if this is actually saving
            new_user = authenticate(username=data['username'],\
                    password=data['password'])
            if new_user is None:
                messages.error(request,"God damn it.")
            login(request, new_user)

            messages.info(request, "Thanks for registering! You are\
                                                            now logged in.")
            return render_to_response('invoicer/welcome.html',
                                                     {'user':new_user})

        else:
            messages.error(request, form._errors)
            return HttpResponseRedirect('//')
有人能告诉我为什么对
authenticate()
的调用不起作用吗



编辑:另外,部署时,我的注册表单肯定会创建用户,这些用户可以在appengine.google.com上的data viewer中看到

验证(用户名=电子邮件)

为了:

验证(电子邮件=电子邮件)

我的后端没有被发送电子邮件,所以它默认为无。真丢脸。但是,由于我使用标准的django登录表单,它会将命名的
用户名
密码
传递到我的后端,因此我必须能够处理用户名(实际上是用户的电子邮件地址)和作为命名关键字的电子邮件

现在,我只是在后台这样做:

from django.contrib.auth.models import User, check_password

    class EmailAuthBackend(object):
        """
        Email Authentication Backend

        Allows a user to sign in using an email/password pair rather than
        a username/password pair.
        """
        supports_anonymous_user = False
        supports_object_permissions = True


        def authenticate(self, email=None, password=None):
            """ Authenticate a user based on email address as the user name. """
            try:
                user = User.objects.get(email=email)
                if user.check_password(password):
                    return user
            except User.DoesNotExist:
                return None

        def get_user(self, user_id):
            """ Get a User object from the user_id. """
            try:
                return User.objects.get(pk=user_id)
            except User.DoesNotExist:
                return None
def authenticate(self, username=None, email=None, password=None):
        """ Authenticate a user based on email address as the user name. """
        if username:
            might_be_email = username
        elif email:
            might_be_email = email
试图通过
查找用户可能是通过电子邮件