{"id":231877,"date":"2022-12-26T11:54:00","date_gmt":"2022-12-26T08:54:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231877"},"modified":"2022-12-26T18:04:48","modified_gmt":"2022-12-26T15:04:48","slug":"lavorare-con-i-transitori-e-lautenticazione-di-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/it\/lavorare-con-i-transitori-e-lautenticazione-di-wordpress\/","title":{"rendered":"Lavorare con i transitori e l&#8217;autenticazione di WordPress"},"content":{"rendered":"\n<p>Proseguendo con il contenuto del <a href=\"https:\/\/wordpress.mediadoma.com\/it\/usare-i-transitori-di-wordpress-invece-dei-cookie\/\" title=\"post precedente\">post precedente<\/a>, \u00e8 importante considerare anche l&#8217;uso dei transitori e l&#8217;autenticazione.<\/p>\n<p>Perch\u00e9 esistono scenari in cui gli utenti vengono autenticati su un sito (si pensi a un&#8217;area riservata ai membri di un sito) e\/o non vengono autenticati sul sito (come i visitatori del sito).<\/p>\n<p>Questi tipi di situazioni sono presenti sia sui blog che su altri siti e applicazioni web su tutta la linea.<\/p>\n<h2>Transitori e autenticazione di WordPress<\/h2>\n<p>Come potremmo memorizzare le informazioni sugli utenti per quegli utenti? Fortunatamente, PHP ci fornisce alcune funzionalit\u00e0 che ci danno la possibilit\u00e0 di farlo senza la necessit\u00e0 di API di WordPress.<\/p>\n<p>In definitiva, l&#8217;obiettivo che miriamo a raggiungere \u00e8 serializzare i dati temporanei utilizzando una chiave che utilizza l&#8217;ID di un utente autenticato o di un utente non autenticato.<\/p>\n<p>Ed ecco come fare ciascuno di questi.<\/p>\n<h3>L&#8217;API di WordPress<\/h3>\n<p>Supponendo che un utente sia autenticato con WordPress, possiamo utilizzare la funzione <a href=\"https:\/\/developer.wordpress.org\/reference\/functions\/get_current_user_id\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_current_user_id<\/a>. \u00c8 anche semplice.<\/p>\n<p>Dal codice di riferimento:<\/p>\n<blockquote>\n<p>Ottieni l&#8217;ID dell&#8217;utente corrente<\/p>\n<\/blockquote>\n<p>Possiamo quindi utilizzare quella funzione nel costruttore per impostare una propriet\u00e0 che memorizza l&#8217;ID dell&#8217;utente. E mostrer\u00f2 il codice per quello momentaneamente, ma che dire della situazione in cui un utente non \u00e8 connesso?<\/p>\n<h3>L&#8217;API PHP<\/h3>\n<p>Quando si tratta di archiviare informazioni per utenti che non sono autenticati, abbiamo comunque bisogno di un modo per identificarli. Questo pu\u00f2 essere fatto in vari modi usando vari valori mantenuti da PHP da aggiungere alla chiave transitoria.<\/p>\n<p>Ricorda, la chiave deve essere unica e, purch\u00e9 sia \u200b\u200bunica per l&#8217;utente sul sito, dovrebbe essere valida.<\/p>\n<p>Due funzioni offerte da PHP sono:<\/p>\n<ul>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.get-current-user.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">get_current_user<\/a><\/li>\n<li><a href=\"https:\/\/www.php.net\/manual\/en\/function.posix-getuid.php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">posix_getuid<\/a><\/li>\n<\/ul>\n<p>Per quanto riguarda il secondo, non funzioner\u00e0 utilizzando IIS o qualsiasi server basato su Windows. Ma lo sto menzionando qui come un&#8217;altra alternativa per gli host basati su * nix (poich\u00e9 cos\u00ec tanti lo sono, specialmente per quanto riguarda WordPress).<\/p>\n<p>La funzione <strong>get_current_user<\/strong> \u00e8 abbastanza chiara:<\/p>\n<blockquote>\n<p>Ottiene il nome del proprietario dello script PHP corrente<\/p>\n<\/blockquote>\n<p>C&#8217;\u00e8 anche qualcos&#8217;altro da notare nel manuale. Afferma esplicitamente questo &quot;[restituisce] il nome del proprietario dell&#8217;attuale script PHP.&quot; E lo affronter\u00f2 prima della fine del post.<\/p>\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159934-61e7008cd3f22.png\" data-rel=\"lightbox\"><img decoding=\"async\" class=\"SDStudio-light-box-enable SDStudio-editor-tools-md-imp\" src=\"https:\/\/wordpress.mediadoma.com\/wp-content\/uploads\/2022\/01\/post-159934-61e7008cd3f22.png\" alt=\"Lavorare con i transitori e l&#039;autenticazione di WordPress\"><\/a><\/p>\n<p>Inoltre, <strong>get_current_user<\/strong> potrebbe anche non essere quello che stai cercando a seconda di come \u00e8 configurato il server e quale utente \u00e8 il &quot;proprietario&quot; dello script PHP in esecuzione sul server.<\/p>\n<p>Ma basti dire che per questo esempio funziona. Ed ecco perch\u00e9: il punto che sto cercando di dimostrare \u00e8 come utilizzare valori che sono unici per un visitatore che non \u00e8 autenticato su un sito per generare una chiave da cui possiamo estrarre informazioni.<\/p>\n<p>Il modo in cui viene generata la chiave \u00e8 secondario rispetto al codice effettivo.<\/p>\n<h3>Combinando Tutto Insieme<\/h3>\n<p>Quindi, che aspetto ha il codice se vogliamo sfruttare le funzioni di cui sopra? Cio\u00e8 se manteniamo una propriet\u00e0 che contiene l&#8217;ID dell&#8217;utente e quindi lo fa sia per gli utenti autenticati che per quelli non autenticati?<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f6f57f45405f609fcd14905c54b30f25#file-01-data-store-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Forse questo<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Initializes the User ID properly this is what's going to be appended to incoming\n * keys when saving or checking for values.\n *\n * Use PHP's native get_current_user function then fall back to WP's\n * and use that to help generate the key.\n *\/\npublic function __construct() \n{\n    $this-&gt;user_id = get_current_user();\n    if (get_current_user_id()) {\n        $this-&gt;user_id = get_current_user_id();\n    }\n}<\/code><\/pre>\n<p>E questo ti dar\u00e0 la funzionalit\u00e0 necessaria per creare un ID utente univoco sia per gli utenti autenticati che per gli utenti non autenticati.<\/p>\n<h3>E le chiavi transitorie?<\/h3>\n<p>S\u00ec, parte del punto di cui stiamo discutendo \u00e8 anche la creazione di chiavi transitorie uniche.<\/p>\n<p>Per fare ci\u00f2, ho trovato abbastanza semplice concatenare l&#8217;ID utente che abbiamo generato sopra e aggiungerlo alla chiave utilizzata durante la serializzazione di un transitorio.<\/p>\n<p><a href=\"https:\/\/gist.github.com\/tommcfarlin\/f6f57f45405f609fcd14905c54b30f25#file-02-get-unique-key-php\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Ad esempio<\/a> :<\/p>\n<pre><code>&lt;?php\n\n\/**\n * Creates a unique key using a combination of the incoming database key and the user's ID.\n *\n * @param string $key The key used to store transient data.\n * @return string     The unique key used to store values associated with the data store.\n *\/\nprivate function getUniqueKey(string $key) \n{\n    return $key .= '-'. $this-&gt;user_id;\n}<\/code><\/pre>\n<p>Quindi, con il valore restituito da questa funzione, possiamo usarlo per salvare i dati come transitori utilizzando chiavi univoche.<\/p>\n<h2>Ancora altre opzioni<\/h2>\n<p>Come accennato, il semplice utilizzo delle funzionalit\u00e0 integrate in PHP potrebbe non essere la strada giusta da percorrere. Ma ci\u00f2 non significa che non ci siano altri valori che forniscono un valore unico a ci\u00f2 di cui hai bisogno.<\/p>\n<p>In casi del genere, \u00e8 importante identificare come si desidera identificare l&#8217;utente, quale sistema operativo sta utilizzando e quale account utente possiede l&#8217;applicazione.<\/p>\n<p>Se ci\u00f2 non fornisce un&#8217;impostazione sufficientemente unica (ed \u00e8 molto probabile che non lo sia in determinate condizioni), il principio si applica comunque: dovrai solo sostituire la chiamata funzionale <strong>get_current_user()<\/strong> in qualcosa che funzioni meglio per voi.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte di registrazione:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si lavora con siti incentrati sull&#8217;appartenenza, \u00e8 importante considerare anche l&#8217;uso dei transitori e l&#8217;autenticazione.<\/p>\n","protected":false},"author":1,"featured_media":237010,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[918,896,835,751,804,783,720,844,865],"tags":[1168],"class_list":["post-231877","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-altro","category-codice","category-guida-per-principianti","category-open-source-projektmanagement-3","category-php-6","category-software-open-source","category-sviluppatore","category-tutorial","category-wordpress-6","tag-affiai-it"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231877","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/comments?post=231877"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/posts\/231877\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/media?parent=231877"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/categories?post=231877"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/it\/wp-json\/wp\/v2\/tags?post=231877"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}