usuarios - Múltiples tipos de usuario para autenticación en Django
tipos de usuario django (1)
Creo que la forma más fácil para que hagas lo que estás diciendo será tener 3 aplicaciones en tu proyecto: tu aplicación de nivel superior, una aplicación "profesional" y una aplicación "cliente". En la aplicación de nivel superior, todo lo que necesita hacer es dar a los usuarios un formulario de inicio de sesión y 2 enlaces, uno para registrarse como profesional y otro para registrarse como cliente.
En este caso, creo que será más fácil para usted utilizar el sistema de Permisos incorporado de Django y asignar cada tipo de usuario a un grupo correspondiente (por ejemplo, profesionales y clientes). Puedes usar un decorador en tus vistas para asegurarte de que solo los miembros de un grupo en particular puedan acceder a esa vista (ya que tienes 2 aplicaciones separadas para cada grupo, puedes agregar un decorador a todas las vistas en cada una de ellas, o puedes importar Django''s funciones de autorización en su urls.py y verifíquelo allí, aunque eso está más allá del alcance de esta respuesta).
El registro es bastante fácil, use su archivo urls.py para reenviar al usuario que desea registrarse en la aplicación correcta. Una vez que lo hagas, deberías poder usar el registro django-allauth en cada aplicación, lo que te permite crear 2 tipos diferentes de usuarios. Asegúrese de que cuando se registre, los asigne a la membresía de grupo correcta.
En cuanto a la redirección de inicio de sesión, una vez que reciba los datos POST, verificaría qué tipo de usuario inició sesión y lo usaré para reenviar al usuario a la URL correcta que acompaña a la aplicación Profesional o Cliente. Puede ver el enlace a continuación para tener una idea de redirigir a un usuario después de iniciar sesión.
Mi web presenta dos tipos de usuario, Cliente y Profesional . También hay dos ''módulos principales'', uno para que los clientes compren cosas y demás (el sitio principal) y el otro para que los profesionales manejen las operaciones. Para auth, me gustaría tener:
- Un único formulario de "inicio de sesión", que detecta si el usuario es un cliente o un profesional y la remite al módulo correcto (sitio principal o sitio de administración).
- Dos formularios de "registro", uno para clientes y otro para profesionales. Probablemente, el sitio le preguntará al usuario si desea registrarse como profesional o como cliente, para activar el flujo de registro correcto para cada caso.
- Los clientes utilizarán el ''sitio principal'' y no deberían estar autorizados para usar el ''sitio de administración''.
- Los profesionales utilizarán el "sitio de administración" pero no deberían estar autorizados para iniciar sesión en el sitio principal.
- Tanto los profesionales como los clientes están registrados como usuarios y comparten campos comunes, como nombre de usuario, teléfono, correo electrónico, etc.
Dado que Django no me deja usar dos modelos para la autenticación. Creé subclases de modelo personalizado AbstractBaseUser y me sirve como una clase de autenticación básica para Cliente y Profesional.
class BaseUser(AbstractBaseUser):
...
class Client(BaseUser):
...
class Professional(BaseUser):
...
También cambié la configuración de AUTH_USER_MODEL
a:
AUTH_USER_MODEL = ''myapp.BaseUser''
También incluí django-allauth para administrar el registro y la autenticación de los usuarios. Pero ahora estoy atascado. Empecé a jugar con Django / Python y no estoy seguro de cómo resolver esto.
Parece que no hay una forma oficial recomendada para hacerlo ( Implementación de múltiples tipos de usuarios con Django 1.5 ). ¿Debo seguir el enfoque de subclases, o debo hacer la relación OnetoOne señalada en los documentos ?
Una vez que tengo los modelos configurados correctamente, ¿cómo debo proceder con los dos formularios de registro? ¿Es posible lograr esto con django-allauth, o tengo que hacerlo manualmente?
Hasta donde yo sé, cuando se registra un nuevo usuario, se crea un nuevo usuario base en la tabla de Usuario. Pero dado que crearé especializaciones de usuario (Cliente o Profesional), ¿cómo debería especificar que también quiero crear datos relacionados con el cliente o datos relacionados con profesionales en la tabla correspondiente?
Soy bastante nuevo en Django, por lo que cualquier consejo me ayudará