2012-06-18 18 views
11

Para un proyecto, voy a crear una aplicación en Google App Engine donde:usuarios Generación de cuentas dentro de Google App Engine

  • Miembros de la Mesa pueden registrarse con su dirección de correo electrónico (o cuenta de OpenID o Google) en el sitio web para usarlo.
  • En la página de administración de la aplicación pueden crear un debate grupal para el cual pueden agregar usuarios según su dirección de correo electrónico
  • y estos usuarios deben recibir los detalles de la cuenta generada (si aún no tienen cuentas) ellos pueden iniciar sesión en esa discusión de grupo con su cuenta recién creada.

No deseo que los líderes de debate tengan una cuenta de Google o una cuenta de OpenID para registrarse en la aplicación y todas las demás cuentas de usuario deben ser generadas por el líder de la discusión.

Sin embargo, Google App Engine parece solo admitir Cuentas de Google y cuentas de OpenID. ¿Cómo voy a hacer esto? ¿Existe un patrón existente para crear cuentas de líder y generar cuentas de usuario desde Google App Engine que todavía son compatibles con la API de usuario de GAE?

Respuesta

4

GAE User API está solo allí para proporcionarle el usuario que está conectado actualmente y algunos de sus atributos. Deberá almacenar esta información de todos modos en un almacén de datos dentro, digamos, del modelo User.

Desde allí se puede hacer lo que quiera con su lógica de negocio, y cómo se va a guardar/crear usuarios en base a los mensajes de correo electrónico y qué hacer con estos usuarios, la forma de agruparlos, etc.

Para admitir el inicio de sesión OAuth, como Facebook o Twitter, deberá ir con su propia API para autenticar a los usuarios de estos servicios (registrar claves, solicitar permisos, etc.). Afortunadamente para usted existen muchos marcos que cubren este problema, pero depende de su estructura y de lo que esté utilizando actualmente.

(exención de responsabilidad es mía) Dado que se acaba de crear una nueva aplicación, se puede echar un vistazo en el proyecto gae-init, que básicamente es un punto de partida para su nueva aplicación que ya ha Google, Facebook y Twitter inicios de sesión y su almacenamiento en el almacén de datos, donde pueden cambiar sus propiedades. Sin embargo, deberá estar familiarizado con GAE.

8

EngineAuth

Hace unos meses he desarrollado un paquete python llamado EngineAuth. Utiliza un middleware para interceptar la solicitud destinada a la autenticación.

Aquí hay una aplicación ejemplo:

http://engineauth.scotchmedia.com/

Y la fuente:

https://github.com/scotch/engineauth

EngineAuth tiene varias estrategias de autenticación. Una de las cuales es contraseña.

Password toma una contraseña y una cadena (podría ser un correo electrónico). Si la cadena está en el almacén de datos, verifica la contraseña contra un hash almacenado. Si coincide, registra al usuario. Si la cadena no está en el almacén de datos, crea un nuevo usuario.

EngineAuth también tiene una estrategia appengine_openid que le permite iniciar sesión con los usuarios que usan App Engine Openid.

Lo bueno de EngineAuth es que si su usuario ha iniciado sesión en App Engine OpenID y luego inician sesión con una contraseña, asocia al usuario con ambas estrategias.

aeauth

yo no estaba completamente satisfecho con EngineAuth, sin embargo, por lo que decidieron crear un diseño más módulo que era más dependiente de webapp2. Nunca completé, ya que estoy desarrollando el proyecto en Ir ahora, pero tal vez el código ayude.

webapp2 auth

Gran parte de la funcionalidad de contraseña de EngineAuth y aeauth fue tomada desde webapp2_extras/auth que podrían dar un enfoque simpilar.

+0

Hola, es agradable ver su respuesta, ya que en realidad investigué su solución y código en gran detalle y encontré un concepto muy interesante de unir al usuario con múltiples perfiles de usuario. Sin embargo, no pude encontrar la manera de hacerlo funcionar con los manejadores de autenticación GAE predeterminados (login: required +/_ah/login_required + @login_required) - Ahora estoy viendo [gae-boilerplate] (https: // github .com/coto/gae-boilerplate). Vigilaré tu GitHub. – mahler

+0

Uso de EngineAuth: una forma de manejar 'login: required' sería crear automáticamente un' appengine_openid' 'user_profile' si un usuario inicia sesión como un usuario de Google. Alternativamente, puede crear un decorador 'login_require' que compruebe los regalos de' request.user' y lo use en su lugar. –

3

Si no desea requerir una cuenta de Google o una cuenta de OpenID, tiene que instalar su propio sistema de cuentas. Esto le da la máxima libertad, pero es mucho trabajo y lo hace responsable de la seguridad de las contraseñas (ouch). Personalmente, le aconsejo que reconsidere este requisito: OpenID especialmente tiene mucho que ofrecer (a excepción de IIUC no es tan simple de usar Facebook).

+0

Gracias por su respuesta y realmente estoy de acuerdo con usted en las ventajas de externalizar el sistema de cuenta. Una de mis ideas era crear cuentas con un proveedor de OpenID llamando a su API desde dentro de mi aplicación, pero todavía no he encontrado un proveedor de OpenID que tenga esta característica. – mahler

+0

Probablemente porque la creación automática de cuentas es el camino hacia el spam masivo y el fraude. –