Ho copiato un vecchio codice che stava lavorando in Compojure 1.1.18 e altre vecchie librerie, ma usando le ultime versioni non riesco a farlo funzionare.Come posso usare il token anti-contraffazione/CSRF ad anello con l'ultima versione ring/compojure?
Ecco la mia minimal example code copiato da the minimal example here per dimostrare che con le ultime librerie anello e compojure, ottengo un errore quando invio una http POST
, anche con il set di intestazione.
lein ring server
per avviarlo, quindi fare
curl -X GET --cookie-jar cookies "http://localhost:3000/"
che si traduce in qualcosa di simile a questo:
{"csrf-token":"7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF"}
Ma quando faccio questo
curl -X POST -v --cookie cookies -F "[email protected]" --header "X-CSRF-Token: 7JnNbzx8BNG/kAeH4bz1jDdGc7zPC4TddDyiyPGX3jmpVilhyXJ7AOjfJgeQllGthFeVS/rgG4GpkUaF" http://localhost:3000/send
ottengo <h1>Invalid anti-forgery token</h1>
Am Sto facendo qualcosa di sbagliato ?
Il codice che ho preso in prestito was intended to answer this question.
sparato al buio ma sfuggire alle barre in avanti (nel token) utilizzando i backslash fa la differenza? – lispHK01
Grazie! James Reeves/weavejester, autore di compojure e [manutentore dell'anello anti-contraffazione mi ha detto che il nuovo 'wrap-defaults' e' site-defaults' nel pacchetto 'ring-defaults'] (https://github.com)/ring-clojure/ring-anti-forgery/issues/10) che sostituisce il deprecato dominio 'handler' compojure richiede automaticamente token CSRF per HTTP' POST' et al. Quindi il mio codice genera il token due volte e io verifica contro quello sbagliato. Sto lavorando a una correzione ... – sventechie