{"id":231579,"date":"2022-12-26T11:45:00","date_gmt":"2022-12-26T08:45:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231579"},"modified":"2022-12-26T17:44:43","modified_gmt":"2022-12-26T14:44:43","slug":"travailler-avec-les-transitoires-wordpress-et-lauthentification","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fr\/travailler-avec-les-transitoires-wordpress-et-lauthentification\/","title":{"rendered":"Travailler avec les transitoires WordPress et l&rsquo;authentification"},"content":{"rendered":"\n<p>En continuant avec le contenu du <a href=\"https:\/\/wordpress.mediadoma.com\/fr\/utiliser-des-transitoires-wordpress-au-lieu-de-cookies\/\" title=\"post pr\u00e9c\u00e9dent\">post pr\u00e9c\u00e9dent<\/a>, il est \u00e9galement important de consid\u00e9rer l&rsquo;utilisation des transitoires et de l&rsquo;authentification.<\/p>\n<p>Parce qu&rsquo;il existe des sc\u00e9narios o\u00f9 les utilisateurs sont authentifi\u00e9s sur un site (pensez \u00e0 une zone r\u00e9serv\u00e9e aux membres d&rsquo;un site) et\/ou ne sont pas authentifi\u00e9s sur le site (comme les visiteurs du site).<\/p>\n<p>Ces types de situations sont pr\u00e9sents \u00e0 la fois sur les blogs et sur d&rsquo;autres sites et applications Web \u00e0 tous les niveaux.<\/p>\n<h2>WordPress transitoires et authentification<\/h2>\n<p>Comment pourrions-nous stocker les informations utilisateur pour ces utilisateurs\u00a0? Heureusement, PHP nous fournit certaines fonctionnalit\u00e9s qui nous permettent de le faire sans avoir besoin des API WordPress.<\/p>\n<p>En fin de compte, l&rsquo;objectif que nous visons est de s\u00e9rialiser les donn\u00e9es transitoires \u00e0 l&rsquo;aide d&rsquo;une cl\u00e9 qui utilise l&rsquo;ID d&rsquo;un utilisateur authentifi\u00e9 ou d&rsquo;un utilisateur non authentifi\u00e9.<\/p>\n<p>Et voici comment faire chacun d&rsquo;entre eux.<\/p>\n<h3>L&rsquo;API WordPress<\/h3>\n<p>En supposant qu&rsquo;un utilisateur est authentifi\u00e9 avec WordPress, nous pouvons utiliser la fonction <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>. C&rsquo;est simple aussi.<\/p>\n<p>\u00c0 partir de la r\u00e9f\u00e9rence de code\u00a0:<\/p>\n<blockquote>\n<p>Obtenir l&rsquo;ID de l&rsquo;utilisateur actuel<\/p>\n<\/blockquote>\n<p>Nous pouvons ensuite utiliser cette fonction dans le constructeur pour d\u00e9finir une propri\u00e9t\u00e9 qui stocke l&rsquo;ID de l&rsquo;utilisateur. Et je vais montrer le code pour cela momentan\u00e9ment, mais qu&rsquo;en est-il de la situation o\u00f9 un utilisateur n&rsquo;est pas connect\u00e9\u00a0?<\/p>\n<h3>L&rsquo;API PHP<\/h3>\n<p>Lorsqu&rsquo;il s&rsquo;agit de stocker des informations pour les utilisateurs qui ne sont pas authentifi\u00e9s, nous avons toujours besoin d&rsquo;un moyen de les identifier. Cela peut \u00eatre fait de diff\u00e9rentes mani\u00e8res en utilisant diverses valeurs maintenues par PHP \u00e0 ajouter \u00e0 la cl\u00e9 transitoire.<\/p>\n<p>N&rsquo;oubliez pas que la cl\u00e9 doit \u00eatre unique, et tant qu&rsquo;elle est unique pour l&rsquo;utilisateur sur le site, elle devrait \u00eatre bonne.<\/p>\n<p>Deux fonctions que propose PHP sont :<\/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>En ce qui concerne le second, il ne fonctionnera pas avec IIS ou tout autre serveur Windows. Mais je le mentionne ici comme une autre alternative pour les h\u00e9bergeurs bas\u00e9s sur * nix (puisque beaucoup le sont, en particulier en ce qui concerne WordPress).<\/p>\n<p>La fonction <strong>get_current_user<\/strong> est suffisamment claire\u00a0:<\/p>\n<blockquote>\n<p>Obtient le nom du propri\u00e9taire du script PHP actuel<\/p>\n<\/blockquote>\n<p>Il y a aussi quelque chose d&rsquo;autre \u00e0 remarquer dans le manuel. Il indique explicitement ceci &quot;[renvoie] le nom du propri\u00e9taire du script PHP actuel.&quot; Et j&rsquo;aborderai cela avant la fin de l&rsquo;article.<\/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=\"Travailler avec les transitoires WordPress et l&#039;authentification\"><\/a><\/p>\n<p>De plus, <strong>get_current_user<\/strong> peut \u00e9galement ne pas \u00eatre ce que vous recherchez en fonction de la configuration du serveur et de l&rsquo;utilisateur qui est le &quot;propri\u00e9taire&quot; du script PHP qui s&rsquo;ex\u00e9cute sur le serveur.<\/p>\n<p>Mais qu&rsquo;il suffise de dire que pour cet exemple, cela fonctionne. Et voici pourquoi: Le point que j&rsquo;essaie de d\u00e9montrer est de savoir comment utiliser des valeurs qui sont uniques \u00e0 un visiteur qui n&rsquo;est pas authentifi\u00e9 sur un site pour g\u00e9n\u00e9rer une cl\u00e9 \u00e0 partir de laquelle nous pouvons extraire des informations.<\/p>\n<p>La fa\u00e7on dont la cl\u00e9 est g\u00e9n\u00e9r\u00e9e est secondaire par rapport au code r\u00e9el.<\/p>\n<h3>Tout combiner<\/h3>\n<p>Alors, \u00e0 quoi ressemble le code si nous voulons tirer parti des fonctions ci-dessus\u00a0? C&rsquo;est-\u00e0-dire si nous maintenons une propri\u00e9t\u00e9 qui contient l&rsquo;ID de l&rsquo;utilisateur et le fait ensuite pour les utilisateurs authentifi\u00e9s et non authentifi\u00e9s\u00a0?<\/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\">Peut-\u00eatre ceci<\/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>Et cela vous donnera la fonctionnalit\u00e9 n\u00e9cessaire pour cr\u00e9er un ID utilisateur unique pour les utilisateurs authentifi\u00e9s et les utilisateurs non authentifi\u00e9s.<\/p>\n<h3>Qu&rsquo;en est-il des cl\u00e9s transitoires\u00a0?<\/h3>\n<p>Oui &#8211; une partie du but de ce dont nous discutons est \u00e9galement de cr\u00e9er des cl\u00e9s transitoires uniques.<\/p>\n<p>Pour ce faire, j&rsquo;ai trouv\u00e9 assez simple de concat\u00e9ner l&rsquo;identifiant de l&rsquo;utilisateur que nous avons g\u00e9n\u00e9r\u00e9 ci-dessus et de l&rsquo;ajouter \u00e0 la cl\u00e9 utilis\u00e9e lors de la s\u00e9rialisation d&rsquo;un transitoire.<\/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\">Par exemple<\/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>Ensuite, avec la valeur renvoy\u00e9e par cette fonction, nous pouvons l&rsquo;utiliser pour enregistrer les donn\u00e9es en tant que transitoire \u00e0 l&rsquo;aide de cl\u00e9s uniques.<\/p>\n<h2>Encore d&rsquo;autres options<\/h2>\n<p>Comme mentionn\u00e9, le simple fait d&rsquo;utiliser des fonctionnalit\u00e9s int\u00e9gr\u00e9es \u00e0 PHP n&rsquo;est peut-\u00eatre pas la bonne voie \u00e0 suivre. Mais cela ne signifie pas qu&rsquo;il n&rsquo;y a pas d&rsquo;autres valeurs qui fournissent une valeur unique \u00e0 ce dont vous avez besoin.<\/p>\n<p>Dans de tels cas, il est important d&rsquo;identifier comment vous souhaitez identifier votre utilisateur, quel syst\u00e8me d&rsquo;exploitation il utilise et quel compte d&rsquo;utilisateur poss\u00e8de l&rsquo;application.<\/p>\n<p>Si cela ne fournit pas un param\u00e8tre suffisamment unique (et il est tr\u00e8s probable que ce ne sera pas le cas dans certaines conditions), alors le principe s&rsquo;applique toujours &#8211; vous aurez juste besoin de remplacer l&rsquo; appel fonctionnel <strong>get_current_user()<\/strong> par quelque chose qui fonctionne le mieux pour tu.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Source d&rsquo;enregistrement:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Lorsque vous travaillez avec des sites ax\u00e9s sur l&rsquo;adh\u00e9sion, il est important de prendre \u00e9galement en compte l&rsquo;utilisation des transitoires et de l&rsquo;authentification.<\/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":[915,893,717,832,780,748,801,841,862],"tags":[1167],"class_list":["post-231579","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autre","category-code-2","category-developpeur","category-guide-pour-les-debutants","category-logiciels-open-source","category-open-source-projektmanagement-2","category-php-3","category-tutoriels","category-wordpress-3","tag-affiai-fr"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231579","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/comments?post=231579"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/posts\/231579\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/media?parent=231579"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/categories?post=231579"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fr\/wp-json\/wp\/v2\/tags?post=231579"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}