2010-09-22 6 views
0

Est-il possible de laisser un utilisateur se connecter uniquement en utilisant une adresse IP spécifique? Cette adresse IP serait différente pour tous les utilisateurs, donc écrire simplement une règle htaccess dans Apache ne résoudrait pas mon problème. J'ai également regardé dans l'écriture d'un backend d'authentification personnalisé mais je ne vois pas comment je pourrais vérifier l'adresse IP actuelle de l'utilisateur car il n'y a pas de variable demande fournie.Restreindre certains comptes utilisateur à certaines adresses IP dans Django

Il n'est pas absolument essentiel d'avoir cette fonctionnalité, mais cela pourrait être sympa. J'ai juste besoin de voir s'il est possible de faire sans sérieusement pirater le framework d'authentification de Django.

Merci, Cory

Répondre

4

Il est assez simple en fait.

  1. créer un backend d'authentification personnalisé qui prend une adresse IP en tant qu'argument (et d'autres si vous voulez plus que cela pour s'authentifier).
  2. créer une vue d'authentification personnalisée

Exemple de vue:

from django.contrib.auth import authenticate, login 

def login(request): 
    user = authenticate(ip=request.META['REMOTE_ADDR']) 
    if user is not None: 
     login(request, user) 
     # Redirect to a success page. 
    else: 
     # Return an 'invalid login' error message. 

Exemple de back-end auth:

class IPAuthBackend: 
    def authenticate(self, ip=None): 
     try: 
      return SomeModel.objects.get(ip=ip).user 
     except SomeModel.DoesNotExist: 
      pass 
+0

Merci pour la réponse. J'étais trop habitué à utiliser la vue de connexion intégrée que je ne savais pas que c'était une possibilité. –

Questions connexes