2012-02-24 5 views
5

He creado un sitio que cuando un usuario completa un formulario correctamente, se le redirige a una página de confirmación que tiene la url mySite.com \ A \ confirmation.play framework ¿cómo hacer un enrutamiento separado para la misma URL?

Quiero ser capaz de redirigir al usuario a una página diferente Si entra en esa url "mySite.com \ A \ confirmación" a sí mismo

¿Cuál es la mejor manera de conseguir esto (que estaba esperando algo más elegante a continuación, mantener el estado de cada usuario)

+0

¿Y exactamente qué buena razón tienes para hacer esto? –

+0

No quiero que nadie publique un enlace a la página de confirmación. se supone que es una página vista por única vez. principalmente para confirmar la interacción entre usuarios, quiero ser el único capaz de redirigir a un usuario allí. – james

+0

Si se trata de una página de validación, eso significa que ya tiene información guardada en alguna parte. Al cargar la página simplemente verifica si esa información está presente. Si no, redirija. –

Respuesta

4

soluciones simples posibles:

  1. tienda alguna clave en la galleta, verifique que en la página de confirmación y claro. valor de la cookie debe ser encriptada, por lo que el usuario no será capaz de forjarlo (si no, puede utilizar Crypto.encryptAES (Cadena), Crypto.decryptAES (String) manualmente.
  2. Cambio de controlador de confirmación para aceptar parámetro, pasar de esos parámetros en forma de presentar controlador: la confirmación (secureParameter); parámetro Validar en el método confirmación
  3. solicitud
  4. hace después de la confirmación de su código y de cambio de rutas y redirección de las peticiones GET
  5. en lugar de redirigir a confirmación. en su controlador, simplemente render la plantilla de confirmación directamente, de esta manera no habría confi rmación URL.
2

Se puede poner una ficha en el ámbito flash y redirigir a mySite.com \ A \ confirmación

Si el token no está allí le redirigir a otra página, de lo contrario mostrar la página y mantener el token en el alcance del flash. Si mantiene el token en el alcance del flash, el usuario podrá volver a cargar la página sin ser redirigido.

2

No será sencillo, ya que puede encontrar muchos casos de bordes.

Cuando se hace una redirección, Play envía un 303 HTTP code y el navegador hace una nueva solicitud GET contra la URL. Podría intentar agregar un parámetro para verificar, pero luego el usuario podría agregarlo a la barra de navegación y la solicitud funcionará.

Además, estarías infringiendo Idempotence in GET. No es algo bueno que hacer, ya que los navegadores pueden confiar en él.

Mejor agregue un cheque en la misma página y si el formulario no se ha enviado, solo muestre un mensaje o arroje un error 404 (no encontrado).