IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Django Python Discussion :

Authentification et middleware


Sujet :

Django Python

  1. #1
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut Authentification et middleware
    Bonjour à tous,

    J'ai un petit problème avec mon authentification . ( qui fonctionne correctement avec le serveur de développement intégré à Django, mais pas sur un serveur uwsgi + Nginx )

    Le problème :

    L'authentification fonctionne, mais de temps en temps, lorsque je navigue sur le site , ou qu'une requête ajax est lancée ou encore avec un simple rafraîchissement, je me retrouve avec le formulaire d'authentification .. pourtant je ne suis pas déconnecté, car si je rafraîchi la page .. le formulaire d'authentification disparaît .

    Pour gérer cette authentification, j'ai créé un simple middleware qui vérifie à chaque requête si ou ou non l'utilisateur est authentifié .

    middleware :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    from django.http import HttpResponse,HttpResponseRedirect
     
    class AuthenticationMiddleware(object):
     
        _LOGIN_PATH = "/accounts/login_view/"
     
        def process_request(self, request):
     
            if (request.path != self._LOGIN_PATH) and not request.is_ajax():
                if not request.user.is_authenticated():
                    return HttpResponseRedirect( self._LOGIN_PATH+'?next=%s' % request.path)
            return None
    Et voici le paramètre MIDDLEWARE_CLASSES dans mon settings
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MIDDLEWARE_CLASSES = (
        'django.middleware.common.CommonMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'debug_toolbar.middleware.DebugToolbarMiddleware',
        'auth.middlewares.AuthenticationMiddleware',
    )
    Et enfin le SESSION_ENGINE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
    Je ne sais plus ou chercher

    Merci d'avance pour votre aide .

    Ch.

  2. #2
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Bon, j'avance dans ma recherche ..

    j'ai remarqué que le phénomène ne se produit qu'uniquement lorsque qu'il y a plus d'un process uwsgi pour le projet .

    Je pense donc qu'il s'agit d'un problème de mémoire partagée et de mise en cache des info d'authentification ..

    Pour info, j'utilise mongoengine pour mon projet .

    J'ai tenté de modifier la méthode de cache de Django :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
            'LOCATION': '/tmp/django_cache',
        }
    }
    Mais le phénomène persiste ...

    je suis preneur de toute idée

    Ch.

  3. #3
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Tout fonctionne bien avec Django 1.4 ... il doit y avoir autre chose :/

  4. #4
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Bon de retour sur la v 1.5, j'avance dans mes tests .

    Si j'utilise uwsgi en mode multithreadé avec 1 seul worker , alors plus de problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    [uwsgi]
     
    # the base directory (full path)
    chdir           = /var/www/project
    # Django's wsgi file
    module          = xxx.wsgi
     
    # the virtualenv (full path)
    home            = /home/preprodadmin/.virtualenvs/xxx
    virtualenv=/home/preprodadmin/.virtualenvs/xxx/
     
    # master
    master          = true
     
    # maximum number of worker processes
    #processes       = 1
    #workers                = 5
    threads         =       5
    max-requests=5000
     
     
    socket=127.0.0.1:5001
     
    chmod-socket    = 664
     
    vacuum          = true

    Par contre dés que j'augmente le nombre de worker , alors là ... je me fait déconnecter rapidement ( mémoire partagé entre process ? )

    Des idées ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 687
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 687
    Par défaut
    Citation Envoyé par Stopher Voir le message
    Par contre dés que j'augmente le nombre de worker , alors là ... je me fait déconnecter rapidement ( mémoire partagé entre process ? )
    Lorsque ça change de thread/workers, les informations "session" ne sont pas restaurées a partir de... C'est probablement un effet de bord dans la configuration mais "trouver" quoi?
    Il y a peut être un chat/forum cote Django ou traînent des expertises disponibles.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre expérimenté Avatar de Stopher
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juin 2004
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 198
    Par défaut
    Merci pour ton retour

    Je vais creuser avec le communauté Django ,

    Je ne sais pas si le problème vient du fait que j'utilise MongoDB comme base de données ( qui n'est pas officiellement supportée ), ou un bug propre à la V1.5.1 de Django ...

    Toujours est-il que le problème semble bien venir d'un problème de partage mémoire entres processus, lorsque l'on utilise pas les threads .

    "GlobalState" de Django ? ..

    Si quelqu'un utilise la V1.5.1 avec une base plus standard ( sql / postgres ), i serait intéressant de voir si l'utilisation de "uwsgi" en mode process ( sans les threads ) avec plus d'un worker/process provoque le même effet .

    En attendant, je continue ma route avec Gunicorn qui ne semble pas poser de problème ... il utilise lui aussi les threads ...

    .. A suivre donc

Discussions similaires

  1. [TIdSMTP] Envoi d'un mail avec authentification ?
    Par BACUS dans le forum C++Builder
    Réponses: 4
    Dernier message: 16/06/2004, 16h18
  2. [C#] Authentification sur les fichiers Pdf
    Par ensisoft dans le forum ASP.NET
    Réponses: 14
    Dernier message: 04/05/2004, 12h10
  3. [Débutant]Classe d'Authentification : compilation impossible
    Par acyclique dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 23/08/2003, 19h42
  4. Authentification Sécurisée
    Par HPJ dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 23/06/2003, 10h45
  5. [POSTGRES] pb configuration authentification
    Par Fyna dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 19/06/2003, 19h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo