{"id":231296,"date":"2022-12-26T12:16:00","date_gmt":"2022-12-26T09:16:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231296"},"modified":"2022-12-26T17:19:48","modified_gmt":"2022-12-26T14:19:48","slug":"trabajando-con-wordpress-transitorios-y-autenticacion","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/es\/trabajando-con-wordpress-transitorios-y-autenticacion\/","title":{"rendered":"Trabajando con WordPress Transitorios y Autenticaci\u00f3n"},"content":{"rendered":"\n<p>Continuando con el contenido de <a href=\"https:\/\/wordpress.mediadoma.com\/es\/utiliza-transitorios-de-wordpress-en-lugar-de-cookies\/\" title=\"la publicaci\u00f3n anterior\">la publicaci\u00f3n anterior<\/a>, tambi\u00e9n es importante considerar el uso de transitorios y autenticaci\u00f3n.<\/p>\n<p>Porque hay escenarios en los que los usuarios se autentican en un sitio (piense en un \u00e1rea exclusiva para miembros de un sitio) o no se autentican en el sitio (como los visitantes del sitio).<\/p>\n<p>Este tipo de situaciones est\u00e1n presentes tanto en blogs como en otros sitios y aplicaciones web de forma generalizada.<\/p>\n<h2>Transitorios de WordPress y autenticaci\u00f3n<\/h2>\n<p>\u00bfC\u00f3mo podr\u00edamos almacenar informaci\u00f3n de usuario para esos usuarios? Afortunadamente, PHP nos brinda algunas funciones que nos permiten hacerlo sin necesidad de las API de WordPress.<\/p>\n<p>En \u00faltima instancia, el objetivo que pretendemos lograr es serializar datos transitorios mediante una clave que utiliza la ID de un usuario autenticado o un usuario no autenticado.<\/p>\n<p>Y aqu\u00ed est\u00e1 c\u00f3mo hacer cada uno de ellos.<\/p>\n<h3>La API de WordPress<\/h3>\n<p>Suponiendo que un usuario est\u00e9 autenticado con WordPress, entonces podemos usar la funci\u00f3n <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>. Es simple, tambi\u00e9n.<\/p>\n<p>De la referencia del c\u00f3digo:<\/p>\n<blockquote>\n<p>Obtener el ID del usuario actual<\/p>\n<\/blockquote>\n<p>Luego podemos usar esa funci\u00f3n en el constructor para establecer una propiedad que almacene la ID del usuario. Y mostrar\u00e9 el c\u00f3digo para eso moment\u00e1neamente, pero \u00bfqu\u00e9 pasa con la situaci\u00f3n cuando un usuario no ha iniciado sesi\u00f3n?<\/p>\n<h3>La API de PHP<\/h3>\n<p>Cuando se trata de almacenar informaci\u00f3n para usuarios que no est\u00e1n autenticados, a\u00fan necesitamos una forma de identificarlos. Esto se puede hacer de varias maneras utilizando varios valores mantenidos por PHP para agregar a la clave transitoria.<\/p>\n<p>Recuerde, la clave tiene que ser \u00fanica, y siempre que sea \u00fanica para el usuario en el sitio, entonces deber\u00eda ser buena.<\/p>\n<p>Dos funciones que ofrece PHP son:<\/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\">obtener_usuario_actual<\/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>En lo que respecta al segundo, no funcionar\u00e1 con IIS ni con ning\u00fan servidor basado en Windows. Pero lo menciono aqu\u00ed como otra alternativa para los hosts que est\u00e1n basados \u200b\u200ben *nix (ya que muchos lo est\u00e1n, especialmente con respecto a WordPress).<\/p>\n<p>La funci\u00f3n <strong>get_current_user<\/strong> es lo suficientemente clara:<\/p>\n<blockquote>\n<p>Obtiene el nombre del propietario del script PHP actual<\/p>\n<\/blockquote>\n<p>Tambi\u00e9n hay algo m\u00e1s que notar en el manual. Indica expl\u00edcitamente que &quot;[devuelve] el nombre del propietario del script PHP actual&quot;. Y abordar\u00e9 esto antes del final de la publicaci\u00f3n.<\/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=\"Trabajando con WordPress Transitorios y Autenticaci\u00f3n\"><\/a><\/p>\n<p>Adem\u00e1s, <strong>get_current_user<\/strong> tambi\u00e9n puede no ser lo que est\u00e1 buscando dependiendo de c\u00f3mo est\u00e9 configurado el servidor y qu\u00e9 usuario sea el &#8216;propietario&#8217; del script PHP que se ejecuta en el servidor.<\/p>\n<p>Pero baste decir que para este ejemplo funciona. Y he aqu\u00ed por qu\u00e9: el punto que estoy tratando de demostrar es c\u00f3mo usar valores que son \u00fanicos para un visitante que no est\u00e1 autenticado en un sitio para generar una clave de la cual podemos extraer informaci\u00f3n.<\/p>\n<p>La forma en que se genera la clave es secundaria al c\u00f3digo real.<\/p>\n<h3>Combinando todo junto<\/h3>\n<p>Entonces, \u00bfc\u00f3mo se ve el c\u00f3digo si vamos a aprovechar las funciones anteriores? Es decir, si mantenemos una propiedad que contiene la identificaci\u00f3n del usuario y luego lo hace tanto para los usuarios autenticados como para los no 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\">Quiz\u00e1s esto<\/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>Y eso le brindar\u00e1 la funcionalidad necesaria para crear una identificaci\u00f3n de usuario \u00fanica tanto para usuarios autenticados como para usuarios no autenticados.<\/p>\n<h3>\u00bfQu\u00e9 pasa con las claves transitorias?<\/h3>\n<p>S\u00ed, parte del objetivo de lo que estamos discutiendo es tambi\u00e9n crear claves transitorias \u00fanicas.<\/p>\n<p>Para hacer esto, me result\u00f3 bastante f\u00e1cil concatenar la identificaci\u00f3n del usuario que generamos anteriormente y agregarla a la clave que se usa al serializar 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\">Por ejemplo<\/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>Luego, con el valor que devuelve esta funci\u00f3n, podemos usarla para guardar los datos como un transitorio usando claves \u00fanicas.<\/p>\n<h2>Todav\u00eda otras opciones<\/h2>\n<p>Como se mencion\u00f3, el simple uso de funciones integradas en PHP puede no ser la ruta adecuada. Pero eso no significa que no haya otros valores que aporten un valor \u00fanico a lo que necesitas.<\/p>\n<p>En casos como ese, es importante identificar c\u00f3mo desea identificar a su usuario, qu\u00e9 sistema operativo usa y qu\u00e9 cuenta de usuario posee la aplicaci\u00f3n.<\/p>\n<p>Si eso no proporciona una configuraci\u00f3n lo suficientemente \u00fanica (y es muy probable que no lo haga bajo ciertas condiciones), entonces el principio a\u00fan se aplica: solo tendr\u00e1 que cambiar la llamada funcional <strong>get_current_user()<\/strong> a algo que funcione mejor para t\u00fa.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Fuente de grabaci\u00f3n:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando se trabaja con sitios enfocados en membres\u00eda, tambi\u00e9n es importante considerar el uso de transitorios y autenticaci\u00f3n.<\/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":[892,716,747,831,914,800,779,840,861],"tags":[1172],"class_list":["post-231296","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-codigo","category-desarrollador","category-fuente-abierta","category-guia-para-principiantes","category-otro","category-php-2","category-software-de-codigo-abierto","category-tutoriales","category-wordpress-2","tag-affiai-es"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231296","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/comments?post=231296"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/posts\/231296\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/media?parent=231296"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/categories?post=231296"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/es\/wp-json\/wp\/v2\/tags?post=231296"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}