2011-01-21 15 views
9

Estoy escribiendo una aplicación de Facebook Connect que inicia sesión usuario después de autenticar la sesión en Facebook, la pregunta es ¿cómo puedo autenticar usuario en django después de obtener el objeto de usuario?Cómo autenticarse manualmente después de obtener el usuario django?

user = User.objects.get(email=email) 
user = authenticate(username=user.username, password=user.password) 
login(request, user) 

¿Hay alguna otra forma de lograrlo?

Respuesta

17

En realidad no necesita autenticar() en primer lugar si usted hace esto (pero que no te lo digo!):

user.backend = 'django.contrib.auth.backends.ModelBackend'

login(request, user)

+0

Este trabajo, pero ¿es malo para usarlo? – marman

+1

No es que yo sepa. Solo trixie! –

+0

Si el único lugar para iniciar sesión en su aplicación es la vista donde está haciendo esto, entonces no es tan malo. Si desea que funcione la página de inicio de sesión de administrador o cualquier otro uso del sistema de autenticación de Django, realmente debería utilizar un servidor de autenticación. – SeanOC

1

authenticate() y login() proporcionan cada uno diferentes tareas, y ambos (o el equivalente retirado del código Django y actualizada para cada versión de Django) se requieren con el fin de registrar un usuario en.

4

hay dos cosas que debe considerar y tener en cuenta en función de su pregunta y ejemplo.

En primer lugar, la forma en que maneja los métodos de autenticación alternativos (por ejemplo, facebook oauth) es authentication backends. Puede mirar djangopackages.com para conocer las opciones existentes o escribir la suya propia. Los servidores que ha configurado son los que definirán qué parámetros espera recibir el authenticate() (por ejemplo, un servidor de Facebook no esperaría que una contraseña como contraseña no tenga sentido en ese contexto).

En segundo lugar, al hacer user.contraseña no obtendrá la contraseña real del usuario. Como medida de seguridad, Django almacena contraseñas como salted one-way hashes. Esto significa que, por diseño, no puede determinar la contraseña de un usuario según lo que está almacenado en la base de datos.

Cuestiones relacionadas