2011-01-26 25 views
5

Estoy compilando una aplicación de Google App Engine para Java con inicio de sesión federado.Google App Engine Java: inicio de sesión federado, qué guardar en el almacén de datos

Cuando un usuario inicia sesión en mi aplicación con un proveedor de OAuth, recupero un objeto de usuario [http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/users /User.html].

Quiero conservar un enlace a ese usuario en el almacén de datos. Sin embargo, ¿qué uso como clave única? ¿Es getFederatedIdentity() o getUserId()? Apenas hay JavaDoc en cualquiera de los dos. Obviamente, cuando un usuario inicia sesión en mi aplicación, quiero recuperar el Objeto que he guardado en el almacén de datos.

Entiendo el campo federatedIdentity, que entiendo que siempre debe rellenarse (solo autorizo ​​los inicios de sesión federados). Sin embargo, si ese es el campo que debo usar para vincular mis detalles con el usuario que inició sesión, Google deja esto vacío cuando prueba en el servidor local ... por lo que no sería de mucha utilidad.

¿Qué es el campo getUserId, cómo lo configura Google? ¿Garantizará permanecer igual si la identidad federada del usuario se mantiene igual?

Muchas gracias

Respuesta

2

Desde el Users Java API Overview

Mientras que un usuario ha iniciado sesión en una aplicación, la aplicación puede acceder a la dirección de correo electrónico de la cuenta o el identificador OpenID para cada petición del usuario hace a la aplicación . La aplicación también puede acceder a una identificación de usuario que identifica al usuario de manera única, incluso si el usuario cambia la dirección de correo electrónico de su cuenta.

suena como getUserId() es la mejor opción.

+0

ok, lo intentaré, tengo curiosidad por saber cómo se configura ese campo de identificación de usuario, entonces ... pero si Google promete que será único, y seguirá siendo el mismo si el inicio de sesión federado es el mismo, 'Estoy feliz. Gracias. – planetjones

+0

suena como si estuviera configurado (en el objeto) por la API de usuario –

0

No necesita almacenar tampoco; puede almacenar el objeto Usuario directamente en el almacén de datos. Consulte here para obtener una lista de los tipos de objetos admitidos.

+0

bien, puedo hacerlo, pero quiero almacenar atributos adicionales contra él (¿así que termino ampliándolo?) Y aún necesitaría recuperarlo cuando el usuario posteriormente inicia sesión, por lo que aún tendría que recuperar el objeto del usuario por una clave ... a menos que UserService.getUser devuelva la versión en el almacén de datos, pero eso no puede ser correcto, y si el usuario cambia su dirección de correo electrónico . Vi algo sobre el uso de direcciones de correo electrónico como la clave única para vincular los inicios de sesión federados a los datos almacenados en mi propia aplicación ... pero eso significa que necesito solicitar permisos para la dirección de correo electrónico del usuario – planetjones

+0

@planetjones Todo eso bien, lo que digo es que puede almacenarlo como una propiedad en su modelo, en lugar de simplemente almacenar la identificación del usuario. Si necesita una clave única e inmutable para el nombre de la clave, use el user_id. –

Cuestiones relacionadas