{"id":231080,"date":"2022-12-26T11:48:00","date_gmt":"2022-12-26T08:48:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=231080"},"modified":"2022-12-26T18:04:39","modified_gmt":"2022-12-26T15:04:39","slug":"arbeta-med-wordpress-transients-och-autentisering","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/sv\/arbeta-med-wordpress-transients-och-autentisering\/","title":{"rendered":"Arbeta med WordPress Transients och autentisering"},"content":{"rendered":"\n<p>N\u00e4r du forts\u00e4tter med inneh\u00e5llet i <a href=\"https:\/\/wordpress.mediadoma.com\/sv\/anvaender-du-wordpress-transients-istaellet-foer-cookies\/\" title=\"det f\u00f6reg\u00e5ende inl\u00e4gget\">det f\u00f6reg\u00e5ende inl\u00e4gget<\/a> \u00e4r det ocks\u00e5 viktigt att \u00f6verv\u00e4ga anv\u00e4ndningen av transienter och autentisering.<\/p>\n<p>Eftersom det finns scenarier d\u00e4r anv\u00e4ndare autentiseras p\u00e5 en webbplats (t\u00e4nk p\u00e5 ett omr\u00e5de som endast \u00e4r f\u00f6r medlemmar p\u00e5 en webbplats) och eller inte autentiseras p\u00e5 webbplatsen (som webbplatsbes\u00f6kare).<\/p>\n<p>Den h\u00e4r typen av situationer finns b\u00e5de p\u00e5 bloggar och andra webbplatser och webbapplikationer \u00f6ver hela linjen.<\/p>\n<h2>WordPress Transients och autentisering<\/h2>\n<p>Hur kan vi lagra anv\u00e4ndarinformation f\u00f6r dessa anv\u00e4ndare? Lyckligtvis ger PHP oss en del funktionalitet som ger oss m\u00f6jligheten att g\u00f6ra det utan att beh\u00f6va WordPress API:er.<\/p>\n<p>I slut\u00e4ndan \u00e4r m\u00e5let som vi siktar p\u00e5 att uppn\u00e5 att serialisera \u00f6verg\u00e5ende data med hj\u00e4lp av en nyckel som anv\u00e4nder ID:t f\u00f6r en autentiserad anv\u00e4ndare eller en icke-autentiserad anv\u00e4ndare.<\/p>\n<p>Och s\u00e5 h\u00e4r g\u00f6r du var och en av dem.<\/p>\n<h3>WordPress API<\/h3>\n<p>F\u00f6rutsatt att en anv\u00e4ndare \u00e4r autentiserad med WordPress, d\u00e5 kan vi anv\u00e4nda funktionen <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>. Det \u00e4r enkelt ocks\u00e5.<\/p>\n<p>Fr\u00e5n kodreferensen:<\/p>\n<blockquote>\n<p>F\u00e5 den aktuella anv\u00e4ndarens ID<\/p>\n<\/blockquote>\n<p>Vi kan sedan anv\u00e4nda den funktionen i konstruktorn f\u00f6r att st\u00e4lla in en egenskap som lagrar anv\u00e4ndarens ID. Och jag kommer att visa koden f\u00f6r det ett \u00f6gonblick, men hur \u00e4r det med situationen n\u00e4r en anv\u00e4ndare inte \u00e4r inloggad?<\/p>\n<h3>PHP API<\/h3>\n<p>N\u00e4r det g\u00e4ller att lagra information f\u00f6r anv\u00e4ndare som inte \u00e4r autentiserade beh\u00f6ver vi fortfarande ett s\u00e4tt att identifiera dem. Detta kan g\u00f6ras p\u00e5 en m\u00e4ngd olika s\u00e4tt med hj\u00e4lp av olika v\u00e4rden som underh\u00e5lls av PHP f\u00f6r att l\u00e4gga till den transienta nyckeln.<\/p>\n<p>Kom ih\u00e5g att nyckeln m\u00e5ste vara unik, och s\u00e5 l\u00e4nge den \u00e4r unik f\u00f6r anv\u00e4ndaren p\u00e5 webbplatsen ska den vara bra.<\/p>\n<p>Tv\u00e5 funktioner som PHP erbjuder \u00e4r:<\/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>N\u00e4r det g\u00e4ller den andra kommer den inte att fungera med IIS eller n\u00e5gra Windows-baserade servrar. Men jag n\u00e4mner det h\u00e4r som ett annat alternativ f\u00f6r v\u00e4rdar som \u00e4r *nix-baserade (eftersom s\u00e5 m\u00e5nga \u00e4r det, s\u00e4rskilt n\u00e4r det g\u00e4ller WordPress).<\/p>\n<p>Get_current_user <strong>&#8211;<\/strong> funktionen \u00e4r tillr\u00e4ckligt tydlig:<\/p>\n<blockquote>\n<p>H\u00e4mtar namnet p\u00e5 \u00e4garen av det aktuella PHP-skriptet<\/p>\n<\/blockquote>\n<p>Det finns n\u00e5got annat att l\u00e4gga m\u00e4rke till i manualen. Det st\u00e5r uttryckligen detta &quot;[returnerar] namnet p\u00e5 \u00e4garen av det nuvarande PHP-skriptet.&quot; Och jag kommer att ta upp detta innan slutet av inl\u00e4gget.<\/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=\"Arbeta med WordPress Transients och autentisering\"><\/a><\/p>\n<p>Dessutom kanske <strong>get_current_user<\/strong> inte heller \u00e4r vad du letar efter beroende p\u00e5 hur servern \u00e4r konfigurerad och vilken anv\u00e4ndare som \u00e4r &quot;\u00e4gare&quot; till PHP-skriptet som k\u00f6rs p\u00e5 servern.<\/p>\n<p>Men det r\u00e4cker med att s\u00e4ga att f\u00f6r detta exempel fungerar det. Och h\u00e4r \u00e4r varf\u00f6r: Po\u00e4ngen jag f\u00f6rs\u00f6ker visa \u00e4r hur man anv\u00e4nder v\u00e4rden som \u00e4r unika f\u00f6r en bes\u00f6kare som inte \u00e4r autentiserad p\u00e5 en webbplats f\u00f6r att generera en nyckel fr\u00e5n vilken vi kan h\u00e4mta information.<\/p>\n<p>Hur nyckeln genereras \u00e4r sekund\u00e4rt till den faktiska koden.<\/p>\n<h3>Att kombinera allt tillsammans<\/h3>\n<p>S\u00e5 hur ser koden ut om vi ska utnyttja ovanst\u00e5ende funktioner? Det vill s\u00e4ga om vi uppr\u00e4tth\u00e5ller en egenskap som innehar anv\u00e4ndarens ID och sedan g\u00f6r det f\u00f6r b\u00e5de autentiserade och icke-autentiserade anv\u00e4ndare?<\/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\">Kanske detta<\/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>Och det ger dig den funktionalitet som kr\u00e4vs f\u00f6r att skapa ett unikt anv\u00e4ndar-ID f\u00f6r b\u00e5de autentiserade anv\u00e4ndare och icke-autentiserade anv\u00e4ndare.<\/p>\n<h3>Hur \u00e4r det med transienta nycklar?<\/h3>\n<p>Ja \u2013 en del av po\u00e4ngen med det vi diskuterar \u00e4r ocks\u00e5 att skapa unika transienta nycklar.<\/p>\n<p>F\u00f6r att g\u00f6ra detta har jag tyckt att det \u00e4r l\u00e4tt nog att sammanfoga anv\u00e4ndarens ID som vi har genererat ovan och l\u00e4gga till det till nyckeln som anv\u00e4nds vid serialisering av en transient.<\/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\">Till exempel<\/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>Sedan, med v\u00e4rdet som denna funktion returnerar, kan vi anv\u00e4nda det f\u00f6r att spara data som en transient med unika nycklar.<\/p>\n<h2>Fortfarande andra alternativ<\/h2>\n<p>Som n\u00e4mnts kanske det inte \u00e4r r\u00e4tt v\u00e4g att g\u00e5 att anv\u00e4nda funktioner som \u00e4r inbyggda i PHP. Men det betyder inte att det inte finns andra v\u00e4rden som ger ett unikt v\u00e4rde till det du beh\u00f6ver.<\/p>\n<p>I s\u00e5dana fall \u00e4r det viktigt att identifiera hur du vill identifiera din anv\u00e4ndare, vilket operativsystem de anv\u00e4nder och vilket anv\u00e4ndarkonto som \u00e4ger applikationen.<\/p>\n<p>Om det inte ger en tillr\u00e4ckligt unik inst\u00e4llning (och det \u00e4r mycket troligt att det inte g\u00f6r det under vissa f\u00f6rh\u00e5llanden), s\u00e5 g\u00e4ller principen fortfarande \u2013 du beh\u00f6ver bara byta ut det funktionella anropet <strong>get_current_user()<\/strong> till n\u00e5got som fungerar b\u00e4st f\u00f6r du.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">Inspelningsk\u00e4lla:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e4r du arbetar med medlemsfokuserade webbplatser \u00e4r det viktigt att \u00e4ven \u00f6verv\u00e4ga anv\u00e4ndningen av transienter och autentisering.<\/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":[838,848,901,755,922,807,787,724,868],"tags":[1173],"class_list":["post-231080","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide-foer-nyboerjare","category-handledningar","category-koda","category-oeppen-kaella","category-oevrig","category-php-9","category-programvara-med-oeppen-kaellkod","category-utvecklaren","category-wordpress-9","tag-affiai-sv"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231080","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/comments?post=231080"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/posts\/231080\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media\/237010"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/media?parent=231080"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/categories?post=231080"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/sv\/wp-json\/wp\/v2\/tags?post=231080"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}