12
votes

Différentes sessions pour admin et applications à Django

J'aimerais avoir différentes sessions pour l'interface administrative Django et les applications pour pouvoir vous connecter en tant qu'administrateur à l'interface administrative et comme utilisateur standard à l'application.

Des idées Comment réaliser cela?

P.s. Bien sûr, je peux utiliser 2 instances de navigateur Web différentes, toute autre manière?


3 commentaires

Cela semble intéressant car il devrait également vous donner l'occasion d'afficher Frontend / Backend dans différentes langues ...


Je doute que cela soit possible en utilisant django.contrib.auth, je m'attends à ce que vous deviez écrire votre propre solution, ce qui va être beaucoup plus de travail que d'utiliser 2 instances de navigateur différentes (ou en utilisant le mode privé de votre navigateur, par exemple chrome incognito. - Google.com/support/chrome/bin/answer .py? hl = en & réponse = 95464 ).


Il ne devrait pas être possible de faire fonctionner avec l'utilisation de différents cookies de session / clés de session pour le front et le backend ... Je suppose que vous devriez créer votre propre middleware de session, qui vérifie s'il s'agit d'une demande d'administrateur ou non et gère deux cookies différents. ...


3 Réponses :


9
votes

La façon dont j'ai résolu cela dans le passé, c'est avoir 2 URL différentes. www.example.com et admin.example.com.com. Comme les sessions sont stockées dans des cookies et que les cookies sont spécifiques à un domaine, vous pouvez utiliser les deux en même temps.


3 commentaires

Ceci est une bonne solution qui nécessite un petit piratage en dehors de la configuration URLS.PY.PY et un sous-domaine dans votre fichier de zone DNS!


Si cela répondit à votre question, veuillez la marquer comme la réponse, si cela n'a pas été demandé de questions de suivi et je suivrai un suivi.


En production, il est un moyen le plus élégant.



1
votes

Vous pouvez également y parvenir à deux fichiers de paramètres (très légèrement différents), chacun ayant un nom de clé de session différent:

in Paramètres_app.py:

SESSION_COOKIE_NAME = 'mysite_admin'


0 commentaires

6
votes

Je voulais juste encourager l'utilisation de la solution proposée par Bernhard Vallant. Il faut 10 minutes pour mettre en œuvre et tester. Il suffit de saisir la mise en oeuvre de sessionMiddleware, faites votre propre version de celui-ci en remplacement des paramètres.session_cookie_name Selon le chemin de la demande Démarre avec l'URL d'administrateur ou non et remplacer le django.contrib.sessions.middlewrawa.sesssessionMiddlewarewarewarewarewareware avec votre nouveau dans vos paramètres.py

MIDDLEWARE_CLASSES = (
...
#'django.contrib.sessions.middleware.SessionMiddleware',
'path.to.your.AdminCookieSessionMiddleware',
... )
ADMIN_SESSION_COOKIE_NAME = 'somethingDifferentThanSESSION_COOKIE_NAME'


3 commentaires

Il y a un problème avec la solution ci-dessus. Toutes les demandes d'interface d'administration ne sont pas fournies avec le préfixe '/ admin'. Par exemple, si vous utilisez GRAPPELLI pour l'interface administrative, vos recherches M2M Dynamic M2M ou AutoComplete d'administration vont se rendre sur 'Site.url / Grappelli / Recherche. Donc, vous auriez besoin de gérer cela également dans la méthode Cookie_Name d'un exemple ci-dessus, car on serait interdit 403 réponse dans ce cas pour la recherche.


Il existe également un problème avec le jeton CSRF, les formulaires sur le site administrateur et non administrateur l'utiliseront et écrasez-vous, de sorte que le nom de Cookie CSRF doit également être modifié sur un site administrateur et non administrateur.


Belle solution pour certains développer un environnement. Au fait, je pense que l'heavit de SessionMiddleware est meilleur.