Esempio di sito wordpress con login SPID e forms precompilati
Dimostra come è possibile acquisire gli attributi SPID e usarli per precompilare un form, senza usare codice custom, ma solo plugin di largo utilizzo.
Il plugin spid-wordpress quando un utente fa il login con SPID aggiunge (con https://codex.wordpress.org/Function_Reference/update_user_meta o https://codex.wordpress.org/Class_Reference/WP_User#set.28_.24key.2C_.24value_.29) gli attributi SPID nel database di Wordpress.
Ove possibile nei campi standard:
- User’s first name: name
- User’s last name: familyName
- User’s email address: email
i rimanenti e nella tabella wp_usermeta
, con i nomi seguenti:
- spid_placeOfBirth
- spid_countyOfBirth
- spid_dateOfBirth
- spid_gender
- spid_fiscalNumber
- spid_idCard
- spid_mobilePhone
- spid_address . spid_expirationDate
- spid_digitalAddress
I primi tre saranno accessibili in CF con l'opzione default rispettivamente come:
- default:user_first_name
- default:user_last_name
- default:user_email
mentre per gli altri usiamo dynamictext.
I campi di CF7 sono modificabili dal client, quindi un utente malintenzionato potrebbe alterare i valori precompilati, vanificando la garanzia di autenticità fornita da SPID.
La soluzione proposta in questo esempio quindi è adeguata solo per formulari non critici.
Per salvare gli attributi SPID in modo sicuro nel backend è necessario inserirli nel form dopo che l'utente ha inviato i campi insicuri.
Una soluzione potrebbe essere sviluppare un plugin custom che si registri all'hook wpcf7_posted_data
:
add_filter( 'wpcf7_posted_data', 'action_wpcf7_posted_data', 10, 1 );
vedi: https://stackoverflow.com/a/40005310, e inserendo i dati aggiuntivi nella funzione action_wpcf7_posted_data
.
Testato su: amd64 Debian 9.5 (stretch, current stable) con PHP 7.0.
-
WordPress 4.9.8
-
simevo/spid-wordpress Versione 0.11.0
-
contact-form-7 Versione 5.0.4
-
contact-form-7-dynamic-text-extension Versione 2.0.2.1 per precompilare con gli attributi SPID i campidi CF.
-
contact-form-7-to-database-extension Versione 1.2.4, per salvare i form inviati a DB e mostrarli in una tabella.
Si crea un modulo CF come:
<label>Nome: [text name1 default:user_first_name]</label>
<label>Cognome: [text familyName default:user_last_name]</label>
<label>Codice catastale del Comune o della nazione estera di nascita: [dynamictext placeOfBirth "CF7_get_current_user key='spid_placeOfBirth'"]</label>
<label>Sigla della provincia di nascita: [dynamictext countyOfBirth "CF7_get_current_user key='spid_countyOfBirth'"]</label>
<label>Data di nascita: [dynamictext dateOfBirth "CF7_get_current_user key='spid_dateOfBirth'"]</label>
<label>Sesso: [dynamictext gender "CF7_get_current_user key='spid_gender'"]</label>
<label>Codice fiscale: [dynamictext fiscalNumber "CF7_get_current_user key='spid_fiscalNumber'"]</label>
<label>Documento d'identità: [dynamictext idCard "CF7_get_current_user key='spid_idCard'"]</label>
<label>Numero di telefono mobile: [dynamictext mobilePhone "CF7_get_current_user key='spid_mobilePhone'"]</label>
<label>Indirizzo di posta elettronica: [email email default:default:user_email]</label>
<label>Domicilio fisico: [dynamictext address "CF7_get_current_user key='spid_address'"]</label>
<label>Data di scadenza identità: [dynamictext expirationDate "CF7_get_current_user key='spid_expirationDate'"]</label>
<label>Indirizzo casella PEC (posta certificata): [dynamictext digitalAddress "CF7_get_current_user key='spid_digitalAddress'"]
</label>
[submit "Invia formulario"]
Può essere utile saltare l'invio della mail, inserendo l'opzione skip_mail: on
nella tab "Impostazioni Aggiuntive".
Questo screencast mostra cosa dovrebbe succedere se tutto funziona:
In attesa che spid-wordpress registri nel DB i campi meta necessari, li abbiamo inseriti a mano:
export DOCKER_MYSQL=`docker ps -f "ancestor=mysql:5.7" --format "{{.ID}}"`
docker exec -it $DOCKER_MYSQL mysql -pwordpress wordpress -u wordpress
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_placeOfBirth', 'K888');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_countyOfBirth', 'AT');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_dateOfBirth', '1955-01-02');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_gender', 'M');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_fiscalNumber', 'XXXYYY66J22K888T');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_idCard', 'XX545434');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_mobilePhone', '+39 333 5555555');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_address', 'Via Battilova 8 Torino');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_expirationDate', '2020-01-01');
INSERT INTO wp_usermeta(user_id, meta_key, meta_value) VALUES(1, 'spid_digitalAddress', 'test@pec.example.com');
^d
TODO
Copyright (c) 2018, simevo s.r.l.
License: AGPL 3, see LICENSE file.