2010-01-13 2 views
2

J'essaye de déployer mon application Django sur un serveur basé sur Apache2 avec mod_python. J'ai bien défini les gestionnaires et j'ai fait la configuration pour que mod_python fonctionne avec mon projet. Mon projet met en œuvre un back-end auth personnalisé pour connecter mes utilisateurs à Twitter, et ma mise en œuvre de back-end est:Le backend d'authentification personnalisée de Django n'est pas reconnu sur Apache

myproject 
|- backends/ 

directory.Everything semble fonctionner très bien, mon chargement des pages et je peux faire lecture/écriture des opérations correctement. Mais chaque fois que j'essaie de me connecter avec mon compte Twitter, l'application déclenche une exception en me disant:

Erreur backend d'authentification importation backends.twitteroauth: "Aucun module nommé backends.twitteroauth"

Dans mon settings.py, je m enregistrer mon backend comme

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', 
    'myproject.backends.twitteroauth.TwitterBackend', 
) 

Quel est le problème?

+0

Ceci est un problème avec gunicorn aussi. –

Répondre

2

La suppression de la base de données a résolu mon problème. Autant que je puisse deviner, si un utilisateur est connecté, son backend de connexion correspondant est conservé en tant que variable de session sur la base de données. Mon fichier settings.py était

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend', 
    'backends.twitteroauth.TwitterBackend', 
) 

avant que je la correction. Changer settings.py et redémarrer l'application n'était tout simplement pas suffisant. Vous devez également supprimer les enregistrements liés à la session de db.

2

Le problème est que python ne peut pas trouver le module twitteroauth. Quel est le nom du fichier TwitterBackend? Assurez-vous également qu'il existe un fichier __init__.py dans backends pour le marquer comme un package.

modifier:

Qu'est-ce qui se passe si vous exécutez le shell

python manage.py shell 

et essayez d'importer là?

from myproject.backends.twitteroauth import TwitterBackend 

Comme tout le reste fonctionne bien, je suppose que myproject est dans votre chemin de python.

+0

TwitterBackend est une classe et le fichier est twitteroauth. J'ai __init__.py dans le répertoire. –

+0

'init.py' ou' __init __. Py'? –

1

Assurez-vous que les backends se trouvent sur le chemin python et que le fichier init .py est bien présent dans le dossier.