Django-fr

Forum

#1 20-12-2016 16:34:38

gaderte
Membre
Inscription : 20-12-2016
Messages : 6

Interdire connexion anonyme Django Helpdesk

Bonjour,

Je travaille actuellement sur la partie Helpdesk de Django. Pour l'instant, mon helpdesk est accessible par tout le monde. Les comptes administrateurs y ont accès, les utilisateurs normaux également, mais les non connectés aussi (avec le même status que les utilisateurs normaux.)

Hors, j'aimerai qu'une personne non connectée soit redirigé vers la page de login, c'est à dire : http://192.168.x.xxx:8000/helpdesk/logi … /helpdesk/.

Si possible, j'aimerais que n'importe quel url entré après le http://192.168.x.xxx:8000/helpdesk/nimportequoi soit également redirigé vers la page de login s'il n'est pas connecté, ou vers l'accueil (http://192.168.x.xxx:8000/helpdesk/) s'il est connecté.

Merci à vous !

Dernière modification par gaderte (20-12-2016 16:35:08)

Hors ligne

#2 22-12-2016 08:46:50

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Interdire connexion anonyme Django Helpdesk

Bonjour,

Il faut ajouter le décorateur login_required sur les vues.

Hors ligne

#3 22-12-2016 12:52:49

gaderte
Membre
Inscription : 20-12-2016
Messages : 6

Re : Interdire connexion anonyme Django Helpdesk

Merci de votre réponse.

Effectivement j'avais trouvé cette solution que j'avais mise en place et qui fonctionne.
J'essaye encore de trouver une solution en ce qui concerne la redirection en cas d'url introuvable.

Hors ligne

#4 27-12-2016 12:36:51

ozgrow
Membre
Inscription : 08-08-2016
Messages : 8

Re : Interdire connexion anonyme Django Helpdesk

tu trouveras dans la doc : https://docs.djangoproject.com/fr/1.10/ … h/default/ :

from django.contrib.auth.decorators import login_required

@login_required(redirect_field_name='my_redirect_field')
def my_view(request):
    ...
Notez que si vous indiquez une valeur pour redirect_field_name, il faudra très probablement aussi personnaliser le gabarit de connexion, dans la mesure où la variable de contexte du gabarit qui stocke le chemin de redirection utilise la valeur de redirect_field_name comme clé à la place de "next" (la valeur par défaut).

login_required() accepte également un paramètre facultatif login_url. Exemple :

from django.contrib.auth.decorators import login_required

@login_required(login_url='/accounts/login/')
def my_view(request):
    ...

Hors ligne

#5 27-12-2016 14:22:49

gaderte
Membre
Inscription : 20-12-2016
Messages : 6

Re : Interdire connexion anonyme Django Helpdesk

Merci de votre réponse.

C'est exactement la méthode que j'ai utilisé. J'ai ajouté avant le 'def homepage' et 'def kb(knowledge database)' l'import login required avec cette forme :
@login_required(login_url='/login/?next=/')

Je cherche maintenant la réponse à ma seconde question

Hors ligne

#6 27-12-2016 17:16:14

ozgrow
Membre
Inscription : 08-08-2016
Messages : 8

Re : Interdire connexion anonyme Django Helpdesk

Si possible, j'aimerais que n'importe quel url entré après le http://192.168.x.xxx:8000/helpdesk/nimportequoi soit également redirigé vers la page de login s'il n'est pas connecté, ou vers l'accueil (http://192.168.x.xxx:8000/helpdesk/) s'il est connecté.

Ta phrase est incohérente je ne suis pas sur de comprendre, tu souahites que toute urls enfant de helpdesk soit accessible sous condition d'être connecté? Car si tu redirige toute personne connecter qui interroge un enfant de helpdesk sur l'accueil tu tourneras en rond^^
En revanche dans ta page d'identification tu peux les redirigé sur la page d'accueil.

Il y a surement de meilleurs façons de faire mais tu peux assez facilement faire :

-Une vue accueil a la racine de helpdesk dans ton urls.py, (ou même avec un redirect de l'url ../helpdesk/ vers ../helpdesk/accueil/ )

-Puis sur toutes tes views ajouter le décorateur @login_required, En plus propre et plus rapide a l'usage, tu as la class LoginRequieredMixin :

class LoginRequiredMixin¶
New in Django 1.9.
Si une vue utilise cette classe mixin, toutes les requêtes par des utilisateurs non authentifiés seront redirigées vers la page de connexion ou traitées comme des erreurs HTTP 403 Forbidden, selon le paramètre raise_exception.

Vous pouvez définir n'importe lequel des paramètres de AccessMixin pour personnaliser le traitement des utilisateurs non authentifiés :

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

Hors ligne

#7 27-12-2016 17:45:39

gaderte
Membre
Inscription : 20-12-2016
Messages : 6

Re : Interdire connexion anonyme Django Helpdesk

Merci de votre réponse.

Je pense cependant que ma phrase est cohérente, mais je vais la reformuler. J'aimerai que si quelqu'un modifie directement l'url depuis la barre d'url du navigateur et rentre quelque chose de faux, comme http://192.168.x.xxx:8000/helpdesk/nimportequoi , j'aimerais que :

- Il soit redirigé vers la page de login s'il n'est pas connecté au site
- Il soit redirigé vers la page d'accueil (http://192.168.x.xxx:8000/helpdesk/) s'il est déjà connecté au site.

En gros, cela m'évite de créer une page "Erreur : cette page n'existe pas. Veuillez vous rediriger ici".

Merci à vous.

Hors ligne

Pied de page des forums