2012-02-24 3 views
5

Ho costruito un sito che quando un utente compila correttamente un modulo viene reindirizzato a una pagina di conferma con l'url mySite.com \ A \ conferma.play framework come fare il routing separato per lo stesso URL?

Voglio essere in grado di reindirizzare l'utente a una pagina diversa Se entra l'URL "mySite.com \ A \ conferma" se stesso

Qual è il miglior modo per raggiungere questo (i speravo qualcosa di più elegante, allora il mantenimento dello stato di ciascun utente)

+0

E esattamente quale buona ragione devi fare questo? –

+0

Non voglio che nessuno pubblichi un link alla pagina di conferma. dovrebbe essere una pagina visualizzabile una volta sola. soprattutto per confermare l'interazione tra gli utenti, voglio essere l'unico in grado di reindirizzare un utente lì. – james

+0

Se si tratta di una pagina di convalida, significa che si dispone già di informazioni salvate da qualche parte. Al caricamento della pagina è sufficiente verificare se tali dati sono presenti. In caso contrario, reindirizzare. –

risposta

4

Possibili soluzioni semplici:

  1. Conservare qualche chiave nel biscotto, verificare sulla pagina di conferma e chiaro. valore del cookie dovrebbe essere criptato, così l'utente non sarà in grado di forgiare essa (in caso contrario, è possibile utilizzare Crypto.encryptAES (String), Crypto.decryptAES (String) manualmente.
  2. Change controller conferma ad accettare parametro, passare quel parametro dalla forma presentare regolatore: la conferma (secureParameter); parametro Convalida di metodo conferma
  3. richiesta
  4. Do POST per la conferma dal codice e modificare percorsi e reindirizzare su GET richiede
  5. Invece di reindirizzare a conferma. nel controller, è sufficiente rendere direttamente il modello di conferma, in questo modo non ci sarebbe alcuna confi URL di conferma.
2

Si potrebbe mettere un gettone nel campo di applicazione flash e reindirizzare a mySite.com \ A \ conferma

Se il token non è lì lo reindirizza a un'altra pagina, altrimenti visualizzare la pagina e mantenere il token in l'ambito del flash. Se si mantiene il token nell'ambito del flash, l'utente sarà in grado di ricaricare la pagina senza essere reindirizzata.

2

Non sarà semplice, in quanto è possibile trovare molti casi limite.

Quando si esegue un reindirizzamento, Play invia un 303 HTTP code e il browser esegue una nuova richiesta GET contro l'URL. Potresti provare ad aggiungere un parametro da controllare, ma poi l'utente potrebbe aggiungerlo alla barra di navigazione e la richiesta funzionerà.

Inoltre, si violerebbe Idempotence in GET. Non è una buona cosa da fare, dato che i browser possono fare affidamento su di esso.

Meglio aggiungere un assegno nella stessa pagina e se il modulo non è stato inviato, basta mostrare un messaggio o lanciare un errore 404 (non trovato).