2010-06-08 7 views
1

J'utilise authenticate() pour authentifier les utilisateurs manuellement. Utilisation de l'interface admin je vois qu'il n'y a pas « last_login » attribut pour les utilisateursdjango auth: erreur étrange avec authenticate()

Debug retraçage est:

Environment: 

Request Method: GET 
Request URL: https://localhost/login/ 
Django Version: 1.1.1 
Python Version: 2.6.5 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.admin', 
'mobius.polls'] 
Installed Middleware: 
('django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware') 


Traceback: 
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response 
    92.     response = callback(request, *callback_args, **callback_kwargs) 
File "/usr/lib/pymodules/python2.6/django/contrib/auth/__init__.py" in login 
    55.  user.last_login = datetime.datetime.now() 

Exception Type: AttributeError at /login/ 
Exception Value: 'unicode' object has no attribute 'last_login' 

Je ne peux pas comprendre, pourquoi cette différence.
Toute sorte d'aide serait appréciée. Merci d'avance!

Répondre

0

La valeur d'exception indique: "user" est un objet unicode au lieu d'un objet django.contrib.auth.models.User. Êtes-vous sûr que la base de données est accessible? essayer:

python manage.py shell 
>>> from django.contrib.auth.models import User 
>>> u = User.objects.get(pk=1) 
>>> u.last_login 

Ce code doit fonctionner correctement. Si ce n'est pas le cas, il y a un problème avec la configuration de votre base de données. (peut-être que vous n'avez pas fait python manage.py syncdb?)

Veuillez également publier vos parties relatives à la base de données de settings.py. D'après vos informations actuelles, il n'est pas facile de trouver la cause de votre problème. Le complet traceback est également utile.

2

Le problème est pas avec authenticate(), il semble être avec login() que vous semblez passer un unicode dans, plutôt qu'un objet django.contrib.auth.models.User.

Vous devriez probablement obtenir que l'objet utilisateur de authenticate()

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

authenticate and login docs

+0

Où êtes-vous importez 'authenticate' à partir? –

+0

ouais .. a trouvé le problème. Merci – Nullpoet