Skip to content

simevo/spid-wordpress-example-forms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

spid-wordpress-example-forms

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.

Attenzione

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.

Come iniziare

Testato su: amd64 Debian 9.5 (stretch, current stable) con PHP 7.0.

Prerequisiti

Demo

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:

img

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

Authors

TODO

License

Copyright (c) 2018, simevo s.r.l.

License: AGPL 3, see LICENSE file.

About

Esempio di sito wordpress con login SPID e forms precompilati

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published