OK, so it seems what's happening is that the password is being stored in `api_qotduser` plain text.
I *believe* Django expects a hashed password? More strangeness: I switched to using check_password and NOW Django is querying `api_qotduser`, where before it was querying `auth_user`. New login view: def login_result(request): username = request.POST['u'] password = request.POST['p'] try: user = QotdUser.objects.get(username = username) if user.check_password(password): if user.is_active: login(request, user) t = loader.get_template('login/login_success.html') return HttpResponse(t.render()) else: t = loader.get_template('login/login_disabled.html') return HttpResponse(t.render()) else: # return some error message except QotdUser.DoesNotExist: # return appropriate error message The check_password always fails. The SQL it executes is: SELECT `auth_user`.`id`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`password`, [...] FROM `api_qotduser` INNER JOIN `auth_user` ON (`api_qotduser`.`user_ptr_id` = `auth_user`.`id`) WHERE `auth_user`.`username` = 'ricky' Thanks, Jim On Mar 24, 3:37 pm, Jim N <jim.nach...@gmail.com> wrote: > Hi, > > I am writing a basic login routine using django users. > > Here is the view: > def login_result(request): > username = request.POST['u'] > password = request.POST['p'] > logging.debug("look for user %s / %s" % (username, password)) > user = authenticate(username=username, password=password) > if user is not None: > logging.debug("found user %s (%s)" % (username, > user.username)) > if user.is_active: > login(request, user) > t = loader.get_template('login/login_success.html') > return HttpResponse(t.render()) > else: > t = loader.get_template('login/login_disabled.html') > return HttpResponse(t.render()) > else: > t = loader.get_template('login/login_no_such_user.html') > u = request.POST['u'] > c = Context({ > 'user': u, > }) > return HttpResponse(t.render(c)) > > It generates the following SQL before returning a login_no_such_user > message (using MySQL backend): > SELECT `auth_user`.`id`, `auth_user`.`username`, > `auth_user`.`first_name`, `auth_user`.`last_name`, > `auth_user`.`email`, `auth_user`.`password`, `auth_user`.`is_staff`, > `auth_user`.`is_active`, `auth_user`.`is_superuser`, > `auth_user`.`last_login`, `auth_user`.`date_joined` FROM `auth_user` > WHERE `auth_user`.`username` = 'ricky' > > If I run that SQL manually, I get the result I am after. The > submitted passwords also match. > > I suspect my problem may be my user model, subclassed from > django.contrib.auth.models User: > - - - - > class QotdUser(User): > alternate_id = models.CharField(max_length=200, null=True) > identifier = models.CharField(max_length=200, null=True) > service = models.CharField(max_length=200, null=True) > location = models.CharField(max_length=200, null=True, > blank=True) > profile_url = models.URLField(null=True) > questions_proposed_cnt = models.IntegerField(default=0) > questions_published_cnt = models.IntegerField(default=0) > answers_cnt = models.IntegerField(default=0) > featured_status = models.BooleanField("Is Featured", > default=False) > icon = models.ImageField(upload_to=settings.UPLOAD_PATH, > blank=True, null=True) > > def __unicode__(self): > return self.identifier > > def has_answers(self): > return self.answers_cnt > 0 > > def increment_answers(self): > self.answers_cnt = self.answers_cnt + 1 > self.save() > logging.debug("increment answers to %d in QotdUser %s" % > (self.answers_cnt, self.identifier)) > > def decrement_answers(self): > self.answers_cnt = self.answers_cnt - 1 > self.save() > logging.debug("decrement answers to %d in QotdUser %s" % > (self.answers_cnt, self.identifier)) > > - - - - > > That is the user model that I have defined, but Django is doing > something I don't understand. It is referring to the auth_user table > instead. When I create a user using the admin, the user is created in > both auth_user and the user table for my app, api_qotduser. > > Can anyone help me figure out what is going on? Have I subclassed > User from django.contrib.auth.models wrong? > > Thanks, > Jim -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.