{"id":231677,"date":"2022-12-26T11:25:00","date_gmt":"2022-12-26T08:25:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231677"},"modified":"2022-12-26T17:20:05","modified_gmt":"2022-12-26T14:20:05","slug":"trabalhando-com-transitorios-e-autenticacao-do-wordpress","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pt-pt\/trabalhando-com-transitorios-e-autenticacao-do-wordpress\/","title":{"rendered":"Trabalhando com transit\u00f3rios e autentica\u00e7\u00e3o do WordPress"},"content":{"rendered":"\n<p>Continuando com o conte\u00fado do <a href=\"https:\/\/wordpress.mediadoma.com\/pt-pt\/usando-transitorios-do-wordpress-em-vez-de-cookies\/\" title=\"post anterior\">post anterior<\/a>, \u00e9 importante considerar tamb\u00e9m o uso de transientes e autentica\u00e7\u00e3o.<\/p>\n<p>Porque h\u00e1 cen\u00e1rios em que os usu\u00e1rios s\u00e3o autenticados em um site (pense em uma \u00e1rea somente para membros de um site) e ou n\u00e3o s\u00e3o autenticados no site (como visitantes do site).<\/p>\n<p>Esses tipos de situa\u00e7\u00f5es est\u00e3o presentes tanto em blogs quanto em outros sites e aplicativos da web em geral.<\/p>\n<h2>Transientes e autentica\u00e7\u00e3o do WordPress<\/h2>\n<p>Como podemos armazenar informa\u00e7\u00f5es de usu\u00e1rios para esses usu\u00e1rios? Felizmente, o PHP nos fornece algumas funcionalidades que nos permitem fazer isso sem precisar de APIs do WordPress.<\/p>\n<p>Em \u00faltima an\u00e1lise, o objetivo que pretendemos alcan\u00e7ar \u00e9 serializar dados transit\u00f3rios usando uma chave que usa o ID de um usu\u00e1rio autenticado ou n\u00e3o autenticado.<\/p>\n<p>E aqui est\u00e1 como fazer cada um deles.<\/p>\n<h3>A API do WordPress<\/h3>\n<p>Supondo que um usu\u00e1rio esteja autenticado com o WordPress, podemos usar a fun\u00e7\u00e3o <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>. \u00c9 simples tamb\u00e9m.<\/p>\n<p>Da refer\u00eancia de c\u00f3digo:<\/p>\n<blockquote>\n<p>Obter o ID do usu\u00e1rio atual<\/p>\n<\/blockquote>\n<p>Podemos ent\u00e3o usar essa fun\u00e7\u00e3o no construtor para definir uma propriedade que armazena o ID do usu\u00e1rio. E eu vou mostrar o c\u00f3digo para isso momentaneamente, mas e a situa\u00e7\u00e3o quando um usu\u00e1rio n\u00e3o est\u00e1 logado?<\/p>\n<h3>A API PHP<\/h3>\n<p>Quando se trata de armazenar informa\u00e7\u00f5es de usu\u00e1rios n\u00e3o autenticados, ainda precisamos de uma maneira de identific\u00e1-los. Isso pode ser feito de v\u00e1rias maneiras usando v\u00e1rios valores mantidos pelo PHP para anexar \u00e0 chave transit\u00f3ria.<\/p>\n<p>Lembre-se, a chave deve ser exclusiva e, desde que seja exclusiva para o usu\u00e1rio no site, deve ser boa.<\/p>\n<p>Duas fun\u00e7\u00f5es que o PHP oferece s\u00e3o:<\/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>No que diz respeito ao segundo, ele n\u00e3o funcionar\u00e1 usando o IIS ou qualquer servidor baseado em Windows. Mas estou mencionando aqui como outra alternativa para hosts que s\u00e3o baseados em *nix (j\u00e1 que muitos s\u00e3o, especialmente no que diz respeito ao WordPress).<\/p>\n<p>A fun\u00e7\u00e3o <strong>get_current_user<\/strong> \u00e9 clara o suficiente:<\/p>\n<blockquote>\n<p>Obt\u00e9m o nome do propriet\u00e1rio do script PHP atual<\/p>\n<\/blockquote>\n<p>H\u00e1 algo mais a ser observado no manual tamb\u00e9m. Ele afirma explicitamente que &#8220;[retorna] o nome do propriet\u00e1rio do script PHP atual&quot;.<\/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=\"Trabalhando com transit\u00f3rios e autentica\u00e7\u00e3o do WordPress\"><\/a><\/p>\n<p>Al\u00e9m disso, <strong>get_current_user<\/strong> tamb\u00e9m pode n\u00e3o ser o que voc\u00ea est\u00e1 procurando, dependendo de como o servidor est\u00e1 configurado e qual usu\u00e1rio \u00e9 o &#8216;propriet\u00e1rio&#8217; do script PHP que est\u00e1 sendo executado no servidor.<\/p>\n<p>Mas basta dizer que para este exemplo funciona. E aqui est\u00e1 o porqu\u00ea: O ponto que estou tentando demonstrar \u00e9 como usar valores que s\u00e3o exclusivos para um visitante que n\u00e3o est\u00e1 autenticado em um site para gerar uma chave da qual podemos extrair informa\u00e7\u00f5es.<\/p>\n<p>Como a chave \u00e9 gerada \u00e9 secund\u00e1ria ao c\u00f3digo real.<\/p>\n<h3>Combinando tudo junto<\/h3>\n<p>Ent\u00e3o, como \u00e9 o c\u00f3digo se formos aproveitar as fun\u00e7\u00f5es acima? Ou seja, se mantivermos uma propriedade que cont\u00e9m o ID do usu\u00e1rio e depois fizer isso para usu\u00e1rios autenticados e n\u00e3o autenticados?<\/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\">Talvez isso<\/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 isso lhe dar\u00e1 a funcionalidade necess\u00e1ria para criar um ID de usu\u00e1rio exclusivo para usu\u00e1rios autenticados e n\u00e3o autenticados.<\/p>\n<h3>E as chaves transit\u00f3rias?<\/h3>\n<p>Sim \u2013 parte do que estamos discutindo \u00e9 a cria\u00e7\u00e3o de chaves transit\u00f3rias exclusivas tamb\u00e9m.<\/p>\n<p>Para fazer isso, achei f\u00e1cil concatenar o ID do usu\u00e1rio que geramos acima e anex\u00e1-lo \u00e0 chave usada ao serializar um transiente.<\/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\">Por exemplo<\/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>Ent\u00e3o, com o valor que esta fun\u00e7\u00e3o retorna, podemos us\u00e1-lo para salvar os dados como transit\u00f3rios usando chaves exclusivas.<\/p>\n<h2>Ainda outras op\u00e7\u00f5es<\/h2>\n<p>Como mencionado, simplesmente usar recursos embutidos no PHP pode n\u00e3o ser o caminho certo a seguir. Mas isso n\u00e3o significa que n\u00e3o existam outros valores que forne\u00e7am um valor exclusivo para o que voc\u00ea precisa.<\/p>\n<p>Em casos como esse, \u00e9 importante identificar como voc\u00ea deseja identificar seu usu\u00e1rio, qual sistema operacional ele est\u00e1 usando e qual conta de usu\u00e1rio possui o aplicativo.<\/p>\n<p>Se isso n\u00e3o fornecer uma configura\u00e7\u00e3o \u00fanica o suficiente (e \u00e9 muito prov\u00e1vel que n\u00e3o seja sob certas condi\u00e7\u00f5es), o princ\u00edpio ainda se aplica &#8211; voc\u00ea s\u00f3 precisar\u00e1 trocar a chamada funcional <strong>get_current_user()<\/strong> por algo que funcione melhor para voc\u00eas.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fonte de grava\u00e7\u00e3o:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ao trabalhar com sites focados em associa\u00e7\u00e3o, \u00e9 importante considerar tamb\u00e9m o uso de transientes e autentica\u00e7\u00e3o.<\/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":[898,753,722,837,920,806,785,846,867],"tags":[1170],"class_list":["post-231677","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo-2","category-codigo-aberto","category-desenvolvedor","category-guia-para-iniciantes","category-outro","category-php-8","category-software-livre","category-tutoriais","category-wordpress-8","tag-affiai-pt-pt"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231677","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=231677"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/posts\/231677\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=231677"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=231677"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=231677"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}