{"id":231684,"date":"2022-12-26T11:55:00","date_gmt":"2022-12-26T08:55:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231684"},"modified":"2022-12-26T17:22:19","modified_gmt":"2022-12-26T14:22:19","slug":"tyoeskentely-wordpressin-transienttien-ja-todennuksen-kanssa","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/fi\/tyoeskentely-wordpressin-transienttien-ja-todennuksen-kanssa\/","title":{"rendered":"Ty\u00f6skentely WordPressin transienttien ja todennuksen kanssa"},"content":{"rendered":"\n<p><a href=\"https:\/\/wordpress.mediadoma.com\/fi\/kaeytaetkoe-wordpress-transientteja-evaesteiden-sijaan\/\" title=\"Jatkaessa edellisen postauksen\">Jatkaessa edellisen postauksen<\/a> sis\u00e4lt\u00f6\u00e4, on t\u00e4rke\u00e4\u00e4 ottaa huomioon my\u00f6s transienttien ja autentikoinnin k\u00e4ytt\u00f6.<\/p>\n<p>Koska on olemassa tilanteita, joissa k\u00e4ytt\u00e4j\u00e4t todennetaan sivustolla (kuten sivuston vain j\u00e4senille tarkoitettu alue) ja tai ei ole todennettu sivustolla (kuten sivuston vierailijat).<\/p>\n<p>T\u00e4m\u00e4n tyyppisi\u00e4 tilanteita esiintyy sek\u00e4 blogeissa ett\u00e4 muissa sivustoissa ja verkkosovelluksissa kaikkialla.<\/p>\n<h2>WordPressin siirtym\u00e4t ja todennus<\/h2>\n<p>Miten voimme tallentaa k\u00e4ytt\u00e4j\u00e4tietoja kyseisille k\u00e4ytt\u00e4jille? Onneksi PHP tarjoaa meille toimintoja, jotka antavat meille mahdollisuuden tehd\u00e4 niin ilman WordPress-sovellusliittymi\u00e4.<\/p>\n<p>Viime k\u00e4dess\u00e4 tavoite, johon pyrimme, on ohimenevien tietojen sarjoittaminen k\u00e4ytt\u00e4m\u00e4ll\u00e4 avainta, joka k\u00e4ytt\u00e4\u00e4 todennetun tai todentamattoman k\u00e4ytt\u00e4j\u00e4n tunnusta.<\/p>\n<p>Ja t\u00e4ss\u00e4 on, kuinka kukin niist\u00e4 tehd\u00e4\u00e4n.<\/p>\n<h3>WordPress API<\/h3>\n<p>Olettaen, ett\u00e4 k\u00e4ytt\u00e4j\u00e4 on todennettu WordPressill\u00e4, voimme k\u00e4ytt\u00e4\u00e4 <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> funktiota. Se on my\u00f6s yksinkertainen.<\/p>\n<p>Koodiviitteest\u00e4:<\/p>\n<blockquote>\n<p>Hanki nykyinen k\u00e4ytt\u00e4j\u00e4tunnus<\/p>\n<\/blockquote>\n<p>Voimme sitten k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 funktiota rakentajassa asettaaksemme ominaisuuden, joka tallentaa k\u00e4ytt\u00e4j\u00e4n tunnuksen. Ja n\u00e4yt\u00e4n sen koodin hetken, mutta ent\u00e4 tilanne, kun k\u00e4ytt\u00e4j\u00e4 ei ole kirjautunut sis\u00e4\u00e4n?<\/p>\n<h3>PHP API<\/h3>\n<p>Kun on kyse tietojen tallentamisesta k\u00e4ytt\u00e4jille, joita ei ole todennettu, tarvitsemme silti tavan tunnistaa heid\u00e4t. T\u00e4m\u00e4 voidaan tehd\u00e4 useilla tavoilla k\u00e4ytt\u00e4m\u00e4ll\u00e4 erilaisia \u200b\u200bPHP:n yll\u00e4pit\u00e4mi\u00e4 arvoja liitt\u00e4m\u00e4\u00e4n ohimenev\u00e4\u00e4n avaimeen.<\/p>\n<p>Muista, ett\u00e4 avaimen on oltava ainutlaatuinen, ja niin kauan kuin se on ainutlaatuinen sivuston k\u00e4ytt\u00e4j\u00e4lle, sen pit\u00e4isi olla hyv\u00e4.<\/p>\n<p>Kaksi PHP:n tarjoamaa toimintoa ovat:<\/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>Mit\u00e4 tulee toiseen, se ei toimi IIS:ll\u00e4 tai mill\u00e4\u00e4n Windows-pohjaisilla palvelimilla. Mutta mainitsen sen t\u00e4ss\u00e4 toisena vaihtoehtona is\u00e4nnille, jotka ovat *nix-pohjaisia \u200b\u200b(koska monet ovat, erityisesti WordPressin suhteen).<\/p>\n<p>Get_current_user <strong>&#8211;<\/strong> funktio on riitt\u00e4v\u00e4n selke\u00e4:<\/p>\n<blockquote>\n<p>Hakee nykyisen PHP-skriptin omistajan nimen<\/p>\n<\/blockquote>\n<p>K\u00e4sikirjassa on my\u00f6s muuta huomioivaa. Se sanoo nimenomaisesti t\u00e4m\u00e4n &quot;[palauttaa] nykyisen PHP-skriptin omistajan nimen.&quot; Ja k\u00e4sittelen t\u00e4t\u00e4 ennen viestin loppua.<\/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=\"Ty\u00f6skentely WordPressin transienttien ja todennuksen kanssa\"><\/a><\/p>\n<p>Lis\u00e4ksi <strong>get_current_user<\/strong> ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole se, mit\u00e4 etsit, riippuen siit\u00e4, miten palvelin on m\u00e4\u00e4ritetty ja mik\u00e4 k\u00e4ytt\u00e4j\u00e4 on palvelimella k\u00e4ynniss\u00e4 olevan PHP-komentosarjan &quot;omistaja&quot;.<\/p>\n<p>Mutta riitt\u00e4\u00e4, kun sanon, ett\u00e4 t\u00e4m\u00e4 esimerkki toimii. Ja t\u00e4ss\u00e4 syy: Yrit\u00e4n osoittaa, kuinka k\u00e4ytt\u00e4\u00e4 arvoja, jotka ovat ainutlaatuisia vierailijalle, jota ei ole tunnistettu sivustolla, luodakseen avaimen, josta voimme poimia tietoja.<\/p>\n<p>Se, miten avain luodaan, on toissijaista varsinaiseen koodiin n\u00e4hden.<\/p>\n<h3>Yhdist\u00e4m\u00e4ll\u00e4 kaiken yhdess\u00e4<\/h3>\n<p>Milt\u00e4 koodi sitten n\u00e4ytt\u00e4\u00e4, jos haluamme hy\u00f6dynt\u00e4\u00e4 yll\u00e4 olevia toimintoja? Jos siis yll\u00e4pid\u00e4mme omaisuutta, joka sis\u00e4lt\u00e4\u00e4 k\u00e4ytt\u00e4j\u00e4n tunnuksen ja tekee sen sitten sek\u00e4 todennetuille ett\u00e4 todentamattomille k\u00e4ytt\u00e4jille?<\/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\">Ehk\u00e4 t\u00e4m\u00e4<\/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>Ja t\u00e4m\u00e4 antaa sinulle tarvittavat toiminnot yksil\u00f6llisen k\u00e4ytt\u00e4j\u00e4tunnuksen luomiseen sek\u00e4 todennetuille ett\u00e4 todentamattomille k\u00e4ytt\u00e4jille.<\/p>\n<h3>Ent\u00e4 ohimenev\u00e4t avaimet?<\/h3>\n<p>Kyll\u00e4 \u2013 osa keskustelun aihetta on my\u00f6s ainutlaatuisten ohimenevien avainten luominen.<\/p>\n<p>T\u00e4t\u00e4 varten olen huomannut, ett\u00e4 on tarpeeksi helppoa yhdist\u00e4\u00e4 yll\u00e4 luomamme k\u00e4ytt\u00e4j\u00e4tunnus ja liitt\u00e4\u00e4 se avaimeen, jota k\u00e4ytet\u00e4\u00e4n transientin sarjoituksessa.<\/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\">Esimerkiksi<\/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>T\u00e4m\u00e4n funktion palauttamalla arvolla voimme sitten tallentaa tiedot ohimenev\u00e4n\u00e4 yksitt\u00e4isten avainten avulla.<\/p>\n<h2>Viel\u00e4 muita vaihtoehtoja<\/h2>\n<p>Kuten mainittiin, pelkk\u00e4 PHP:n sis\u00e4\u00e4nrakennettujen ominaisuuksien k\u00e4ytt\u00f6 ei v\u00e4ltt\u00e4m\u00e4tt\u00e4 ole oikea tie. Mutta se ei tarkoita, etteik\u00f6 olisi olemassa muita arvoja, jotka tarjoavat ainutlaatuisen arvon tarvitsemallesi.<\/p>\n<p>T\u00e4llaisissa tapauksissa on t\u00e4rke\u00e4\u00e4 tunnistaa, miten haluat tunnistaa k\u00e4ytt\u00e4j\u00e4si, mit\u00e4 k\u00e4ytt\u00f6j\u00e4rjestelm\u00e4\u00e4 h\u00e4n k\u00e4ytt\u00e4\u00e4 ja mik\u00e4 k\u00e4ytt\u00e4j\u00e4tili sovelluksen omistaa.<\/p>\n<p>Jos t\u00e4m\u00e4 ei tarjoa riitt\u00e4v\u00e4n ainutlaatuista asetusta (ja on hyvin todenn\u00e4k\u00f6ist\u00e4, ett\u00e4 ei tietyiss\u00e4 olosuhteissa), periaate p\u00e4tee silti \u2013 sinun tarvitsee vain vaihtaa <strong>get_current_user()<\/strong> &#8211; funktionaalinen kutsu johonkin, joka toimii parhaiten sin\u00e4.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>J\u00e4senyyteen keskittyvien sivustojen kanssa ty\u00f6skennelless\u00e4 on t\u00e4rke\u00e4\u00e4 huomioida my\u00f6s transienttien ja autentikoinnin k\u00e4ytt\u00f6.<\/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":[782,750,719,895,917,834,843,803,864],"tags":[1166],"class_list":["post-231684","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-avoimen-laehdekoodin-ohjelmisto","category-avoin-laehdekoodi","category-kehittaejae","category-koodi","category-muut","category-opas-aloittelijoille","category-opetusohjelmia","category-php-5","category-wordpress-5","tag-affiai-fi"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231684","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/comments?post=231684"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/posts\/231684\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/media?parent=231684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/categories?post=231684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/fi\/wp-json\/wp\/v2\/tags?post=231684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}