python - auth - ldap django
Comprender la autenticación Django-LDAP (2)
Soy nuevo en Django y se me ha asignado la tarea de implementar un sistema de autenticación de usuario con LDAP como back-end. Supongo que la documentation supone que el desarrollador final tiene suficiente experiencia en Django para poder comprender e implementar dicho sistema. Aquí es donde no puedo entender cómo implementar una aplicación django simple con autenticación basada en LDAP. Esto es lo que he entendido hasta ahora:
Solo publicando los cambios en un archivo:
settings.py
....
import ldap
from django_auth_ldap.config import LDAPSearch
AUTH_LDAP_SERVER_URI = "ldap://<my url>"
AUTHENTICATION_BACKENDS = (''django_auth_ldap.backend.LDAPBackend'')
AUTH_LDAP_CONNECTION_OPTIONS = {
ldap.OPT_REFERRALS: 0
}
MIDDLEWARE_CLASSES = (
....
''django.contrib.sessions.middleware.SessionMiddleware'',
''django.contrib.auth.middleware.AuthenticationMiddleware'',
...
)
INSTALLED_APPS = (
''django.contrib.auth'',
''django.contrib.contenttypes'',
''django.contrib.sessions'',
....
)
auth.html
<html>
<head>
<title>Login</title>
</head>
<body>
{{state}}
<form action="" method="post"> {% csrf_token %}
Email address: <input type="text" name="email" value="{{ email }}" />
Password: <input type="password" name="password" value="" />
<input type="submit" value="Log in" />
</form>
</body>
</html>
models.py:
??
views.py:
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login
from django.template import RequestContext
def login_user(request):
username = password = ""
state = ""
if request.POST:
username = request.POST.get(''username'')
password = request.POST.get(''password'')
print username, password
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
state = "Valid account"
else:
state = "Inactive account"
return render_to_response(''auth_user/auth.html'', RequestContext(request, {''state'': state, ''username'': username}))
Lo que no puedo entender?
1> Estoy bastante seguro de que tendría que implementar una función en views.py
para obtener los valores POST
para el email
y la password
y validarlos, por ejemplo: [SO] . La documentación especifica implementar una búsqueda / vinculación o vinculación directa. ¿Por qué? Si el views.py
contendría la pieza real del código de autenticación, ¿qué está haciendo el código especificado en la documentación?
2> Si views.py
llevaría a cabo la autenticación real, ¿por qué necesitamos la variable especificada en la documentación?
3> El autor ha hecho un gran trabajo con la biblioteca, pero la documentación no proporciona un ejemplo sencillo de cómo implementar todo el sistema de autenticación con LDAP. ¿Alguien puede señalar ese recurso, si existe? No es fácil entender los archivos que se deben agregar / modificar para implementar dicho sistema.
Esta página puede tener lo que está buscando: documentation respecto al backend de LDAP. Tienes suerte de que exista uno, por lo que no tienes que codificar un auth backend tú mismo :-)
Básicamente django.contrib.auth.models ya tiene un objeto Usuario que contiene todo lo que necesita sobre el usuario. Por lo tanto, no es necesario crear un nuevo models.py.
Solo necesita autenticarse en su views.py, en una función de inicio de sesión, usando
from django.contrib.auth import authenticate, login
user = authenticate(username=request.REQUEST.get(''email''), password=request.REQUEST.get(''password''))
# handle error cases, inactive users, ...
login(request, user)
Si el usuario es Ninguno, entonces la autenticación falló. De lo contrario, puedes explorar este objeto para ver qué ha atraído el backend.
Luego, puede optar por crear otro modelo con el usuario como clave externa si desea mantener las preferencias vinculadas a este usuario para esta aplicación, pero no como parte del LDAP.
En este caso, necesitarás:
Models.py
La definición de los datos que es importante para usted en función de su aplicación. Va a extraer los datos del usuario del LDAP y completar este modelo con él y otras preferencias vinculadas al usuario:
from django.contrib.auth.models import User
class Profile(models.Model):
"""User profile. Contains some basic configurable settings"""
user = models.ForeignKey(User, unique=True)
phone_number = models.CharField(max_length=256, blank=True, default='''')
...
Views.py
en la función de inicio de sesión, si request.method == ''POST'', entonces get_or_create el perfil de usuario usando el usuario que acaba de obtener de authenticate.
profile, profile_is_new = Profile.objects.get_or_create(user=user)
Los documentos django-auth-ldap están escritos para desarrolladores familiarizados con Django. También LDAP. Si está empezando desde cero, le recomiendo que vaya paso a paso:
- El tutorial de Django
- Autenticación Django
- Algún tipo de tutorial de LDAP, si aún no estás familiarizado.
- django-auth-ldap