Autentica usuarios con Java para el entorno de App Engine Standard

En esta parte del instructivo de Bookshelf, se muestra cómo crear un flujo de acceso para los usuarios que tienen Cuentas de Google y cómo usar la información del perfil con el objetivo de ofrecer funciones personalizadas a los usuarios.

Esta página forma parte de un instructivo de varias páginas. Para comenzar desde el principio y revisar las instrucciones de configuración, ve a la app de Bookshelf en Java.

Ejecuta la app en tu máquina local

Para ejecutar la app de manera local, haz lo siguiente:

  1. En el directorio getting-started-java/bookshelf-standard/4-auth, ingresa el siguiente comando para iniciar un servidor web local:

    mvn -Plocal clean appengine:devserver -Dbookshelf.bucket=[YOUR-BUCKET]
    Reemplaza [YOUR-BUCKET] por el nombre del depósito.
  2. En tu navegador web, ve a http://localhost:8080.

Ahora podrás navegar por las páginas web de la app, acceder con la Cuenta de Google, agregar libros y ver los libros que agregaste mediante el vínculo Mis libros en la barra de navegación superior.

Implementa la app en el entorno de App Engine Standard

Para implementar en el entorno de App Engine Standard, haz lo siguiente:

  1. Para crear un índice en Cloud Datastore que se suba a la app de Bookshelf, crea por lo menos un libro, y, luego, haz clic en Mis libros. Ten en cuenta que, si compilas la app con el comando clean, se borra ese índice local, por lo que debes hacerlo en la versión de la app que vas a implementar.
  2. En el directorio getting-started-java/bookshelf-standard/4-auth, ingresa el siguiente comando para implementar la app:
    mvn appengine:update -Dappengine.appId=[YOUR-PROJECT-ID] -Dappengine.version=[YOUR-VERSION] -Dbookshelf.bucket=[YOUR-BUCKET].appspot.com
    Reemplaza [YOUR-PROJECT-ID] por tu ID del proyecto, y [YOUR-VERSION] por tu versión, como 1, 2 o algún otro valor de string que quieras usar.
  3. En el navegador web, ingresa la siguiente dirección:
    https://[YOUR-PROJECT-ID].appspot.com
    Reemplaza [YOUR-PROJECT-ID] por el ID del proyecto.

Una vez que actualices la app, puedes volver a implementar la versión actualizada mediante el mismo comando que usaste cuando la implementaste por primera vez. Para ello, especifica el mismo ID del proyecto y la misma versión. Esto reemplazará la app implementada actualmente. Si especificas una string de versión diferente en la línea de comandos actualizada, la implementación nueva crea una versión nueva de la app y la convierte a la versión actualmente en uso.

Borra las versiones de la app que no estén en uso para reducir costos.

Para borrar una versión de una app, haz lo siguiente:

  1. En GCP Console, dirígete a la página Versiones de App Engine.

    Ir a la página de Versiones

  2. Haz clic en la casilla de verificación junto a la versión de app no predeterminada que deseas borrar.
  3. Haz clic en el botón Borrar en la parte superior de la página para borrar la versión de la app.

Para obtener toda la información acerca de la limpieza de los recursos facturables, consulta la sección Limpieza del paso final de este instructivo.

Estructura de la app

En el siguiente diagrama, se muestran los componentes de la app y la manera en que se conectan entre sí.

Estructura de muestra de Auth

Comprende el código

En esta sección, se explica el código de la app y su funcionamiento.

Cuando los usuarios hacen clic en Acceder, LoginServlet hace lo siguiente:

  1. Determina si el usuario ya accedió a una Cuenta de Google. Si es así, guarda la información del correo electrónico y el ID del usuario en la sesión actual.

  2. Si el usuario no accedió a una Cuenta de Google, lo redirecciona a la página de acceso correspondiente. Ten en cuenta que el servicio de usuarios de App Engine controla gran parte de la complejidad del acceso de usuarios por ti.

@SuppressWarnings("serial")
public class LoginServlet extends HttpServlet {
  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {

    UserService userService = UserServiceFactory.getUserService();
    if (userService.isUserLoggedIn()) {
      // Save the relevant profile info and store it in the session.
      User user = userService.getCurrentUser();
      req.getSession().setAttribute("userEmail", user.getEmail());
      req.getSession().setAttribute("userId", user.getUserId());

      String destination = (String) req.getSession().getAttribute("loginDestination");
      if (destination == null) {
        destination = "/books";
      }

      resp.sendRedirect(destination);
    } else {
      resp.sendRedirect(userService.createLoginURL("/login"));
    }
  }
}

La clase LogoutServlet borra la session y crea una nueva:

@SuppressWarnings("serial")
public class LogoutServlet extends HttpServlet {

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
    // you can also make an authenticated request to logout, but here we choose to
    // simply delete the session variables for simplicity
    HttpSession session =  req.getSession(false);
    if (session != null) {
      session.invalidate();
    }
    // rebuild session
    req.getSession();
  }
}
¿Te sirvió esta página? Envíanos tu opinión: