java - redireccionar - Juega marco. La sesión se vuelve nula después de la redirección de la página de inicio de sesión de Google
redireccionar google sites a dominio propio (1)
Intento incorporar el gráfico de Google Analytics en la aplicación web para mostrar las estadísticas de los usuarios sobre sus aplicaciones. Esta es la url local http://192.168.100.10:9000/
inicio de sesión en el panel (aplicación web) tengo un botón de inicio de sesión de Google. Hasta ahora aquí mantengo la sesión del usuario después de que inicia sesión.
Y cuando el usuario haga clic en el botón de inicio de sesión. Activa el método de devolución de llamada. Cuando la devolución de llamada se activa por primera vez, se mantiene la sesión. Quiero decir que la session("user")
no es nula aquí.
public Result callback() {
JsonNode jsonNode = Json.parse(session("user"));
UserDTO userDTO = Json.fromJson(jsonNode, UserDTO.class);
if (userDTO.getRole().getType().equals(RoleDTO.EnRoleType.ADMIN.toString()))
return redirect(com.softoven.ultron.controllers.routes.AccountCTRL.index());
if (request().queryString().get("code") != null && request().queryString().get("state") != null && request().queryString().get("state")[0].equals(session("state"))) { // Check if he/she is authorized
session().remove("state");
Analytics analytics = setAnalytics(userDTO, request());
session("analytics", Json.toJson(analytics).toString());
return redirect(com.softoven.ultron.controllers.routes.AccountCTRL.index());
} else { // Create Authorization URL
String url = helper.buildLoginUrl();
session("state", helper.getStateToken());
return redirect(url);
}
}
Esta es la URL cuando el usuario hace clic en el botón de inicio de sesión https://accounts.google.com/o/oauth2/auth?access_type=offline&approval_prompt=force&client_id=784122128025-cvq0fn1e23f24dia4soavsd9v1ovesub.apps.googleusercontent.com&redirect_uri=http://localhost:9000/callback&response_type=code&scope=https://www.googleapis.com/auth/analytics.readonly%20https://www.googleapis.com/auth/analytics.manage.users%20https://www.googleapis.com/auth/analytics%20https://www.googleapis.com/auth/analytics.edit%20https://www.googleapis.com/auth/analytics.manage.users.readonly%20https://www.googleapis.com/auth/analytics.provision&state=google-35808300
Y cuando el usuario hace clic en el botón de permiso en la página de permisos del inicio de sesión de google, el control vuelve a la callback()
de callback()
pero esta session("user")
tiempo session("user")
es nula. que no debería ser nulo porque había configurado la sesión cuando el usuario inició sesión. No sé por qué está sucediendo y cómo solucionarlo.
Y esta es la url final después de la redirección desde la página de permisos de google. http: // localhost: 9000 / callback? state = google-35808300 & code = 4 / g-FkJ3GGS01jbeXLHK0o95ks-K-drGK7bxgzvi3cELU #
Esta es la url local http://192.168.100.10:9000/ ...
... y redirect_uri = http: // localhost: 9000 / ...
Y esta es la url final después de la redirección de la página de permisos de google http: // localhost: 9000 / ...
La URL inicial es diferente de la URL final. Esto no es correcto.
Normalmente, la sesión HTTP en el lado del servidor está vinculada a una cookie de sesión. Las cookies a su vez están vinculadas a un nombre de host específico (IP o dominio). Webbrowsers son muy estrictos al enviar cookies al nombre de host específico. A pesar de que el IP se resolvería con DNS al dominio correcto, los navegadores web pueden rechazar el envío de la cookie creada en una dirección IP junto con una solicitud sobre el nombre de dominio. Básicamente, el servidor web no recuperará la cookie de sesión creada originalmente y, por lo tanto, crea una nueva.
Luego existen navegadores web que rechazan las cookies cuyo nombre de host está establecido explícitamente en "localhost", como Google Chrome: Chrome no crea cookies para domain = localhost en https interrumpidas . Los navegadores también pueden optar por rechazar las cookies cuyo nombre de host se establece explícitamente en una dirección IP, ya que esto puede causar problemas de seguridad cuando el cliente usa una dirección IP dinámica.
Por lo tanto, se recomienda utilizar un nombre de dominio real como example.com
lugar de una dirección IP o "localhost". Sin comprar uno, puede falsificar uno simplemente editando el archivo de hosts . El formato de cada línea es el siguiente, primero las direcciones IP y, a continuación, el espacio de dominios deseado separado.
127.0.0.1 localhost example.com anotherexample.com
Luego, use consistentemente exactamente ese dominio durante todo el proceso. Comience en http://example.com:9000/...
, use &redirect_uri=http://example.com:9000/...
etc.
No utilizo Play Framework, pero si está familiarizado con la API de Servlet, puede comprender mejor el funcionamiento de la sesión HTTP después de leer este Q & A relacionado: ¿Cómo funcionan los servlets? Instanciación, sesiones, variables compartidas y multihebra .