{"id":409,"date":"2023-10-06T08:35:55","date_gmt":"2023-10-06T06:35:55","guid":{"rendered":"https:\/\/merkulova.thkit.ee\/wp20\/?page_id=409"},"modified":"2023-10-06T08:39:36","modified_gmt":"2023-10-06T06:39:36","slug":"as-a-user-i-can-log-in-and-out","status":"publish","type":"page","link":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/","title":{"rendered":"As a user i can log in and out"},"content":{"rendered":"\n<h1 class=\"wp-block-heading\">SVELTEJS\/SAPPER project<\/h1>\n\n\n\n<p><\/p>\n\n\n\n<p>Go to pivotaltracker and schedule a task<\/p>\n\n\n\n<p><strong>The title is As a user i can log in and out<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png\" alt=\"\" class=\"wp-image-1855\"\/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>As a user I see an overview page when I log in<\/p>\n\n\n\n<p>If this is done, let\u2019s go ahead and make the \u201clog in\u201d button in the navigation<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;nav&gt;\n       &amp;lt;ul&gt;\n\t  &amp;lt;li&gt;&amp;lt;a aria-current=&quot;{segment === &#039;login&#039; ? &#039;page&#039; : undefined}&quot; href=&quot;login&quot;&gt;log in&amp;lt;\/a&gt;&amp;lt;\/li&gt;\n\t  &amp;lt;li&gt;&amp;lt;a aria-current=&quot;{segment === &#039;register&#039; ? &#039;page&#039; : undefined}&quot; href=&quot;register&quot;&gt;register&amp;lt;\/a&gt;&amp;lt;\/li&gt;\n\t{\/if}\n       &amp;lt;\/ul&gt;\n&amp;lt;\/nav&gt;\n\n<\/pre><\/div>\n\n\n<p><strong>When I log in, I am redirected to that page<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-32-700x244.png\" alt=\"\" class=\"wp-image-1892\"\/><\/figure>\n\n\n\n<p>after that the first task is done<\/p>\n\n\n\n<p><br>Let\u2019s move on, after that go to this link index.svelte<\/p>\n\n\n\n<p><br>copy this code and create a new file called login.svelte and paste this code there<\/p>\n\n\n\n<p><br>delete line 11 as we don\u2019t need it<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-17.png\" alt=\"\" class=\"wp-image-1859\"\/><figcaption class=\"wp-element-caption\"><br>After that we get an error that \u201cListError\u201d is not defined, it is on line 46 and we delete that as well<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-18.png\" alt=\"\" class=\"wp-image-1860\"\/><\/figure>\n\n\n\n<p><br>when we go to the site we see error 500<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-19-700x338.png\" alt=\"\" class=\"wp-image-1861\"\/><figcaption class=\"wp-element-caption\">Because we have a token instead of a user<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-20.png\" alt=\"\" class=\"wp-image-1862\"\/><figcaption class=\"wp-element-caption\">&lt;script context=\u201dmodule\u201d&gt; export async function preload({ params }, { token }) { if (token) { this.redirect(302, `\/`); } } &lt;\/script&gt;<\/figcaption><\/figure>\n\n\n\n<p><br>and this script needs to be commented so that the login could workAfter that the button works now And the second task is done<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-21.png\" alt=\"\" class=\"wp-image-1863\"\/><figcaption class=\"wp-element-caption\">we need a username instead of an email<br>it should look like this<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-22.png\" alt=\"\" class=\"wp-image-1864\"\/><\/figure>\n\n\n\n<p><br>and when it is done, you can write a username there If we write Username and password here, let\u2019s go, then Network will write us login in red color<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-23.png\" alt=\"\" class=\"wp-image-1865\"\/><figcaption class=\"wp-element-caption\">3 tasks are done<br>After that you go to the login.js link<br>create a new login.js file and paste everything in there<br>I will show you everything that needs to be changed<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-24.png\" alt=\"\" class=\"wp-image-1866\"\/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport * as api from &#039;api.js&#039;;\n\nexport function post(req, res) {\n    api.post(&#039;sessions&#039;, req.body ).then(response =&gt; {\n        if (response.token) req.session.token = response.token;\n        res.setHeader(&#039;Content-Type&#039;, &#039;application\/json&#039;);\n\n        res.end(JSON.stringify(response));\n    });\n}\n\n<\/pre><\/div>\n\n\n<p>4 tasks are done<\/p>\n\n\n\n<p>anything that needs to be changed in the login.js file, I\u2019ll send the code now<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n&lt;script context=&quot;module&quot;&gt;\n    export async function preload({ params }, { token }) {\n        if (token) {\n            this.redirect(302, `\/`);\n        }\n    }\n&lt;\/script&gt;\n\n&lt;script&gt;\n    import { goto, stores } from &#039;@sapper\/app&#039;;\n    import { post } from &#039;utils.js&#039;;\n\n    const { session } = stores();\n\n    let username = &#039;&#039;;\n    let password = &#039;&#039;;\n    let error = null;\n\n    async function submit(event) {\n        const response = await post(`auth\/login`, { username, password });\n\n        \/\/ TODO handle network errors\n        error = response.error;\n        console.log(response)\n        if (response.token) {\n            $session.token = response.token;\n            goto(&#039;\/&#039;);\n        }\n    }\n&lt;\/script&gt;\n\n&lt;svelte:head&gt;\n    &lt;title&gt;Sign in \u2022 Conduit&lt;\/title&gt;\n&lt;\/svelte:head&gt;\n\n&lt;div class=&quot;auth-page&quot;&gt;\n    &lt;div class=&quot;container page&quot;&gt;\n        &lt;div class=&quot;row&quot;&gt;\n            &lt;div class=&quot;col-md-6 offset-md-3 col-xs-12&quot;&gt;\n                &lt;h1 class=&quot;text-xs-center&quot;&gt;Sign In&lt;\/h1&gt;\n                &lt;p class=&quot;text-xs-center&quot;&gt;\n                    &lt;a href=&quot;\/register&quot;&gt;Need an account?&lt;\/a&gt;\n                &lt;\/p&gt;\n                {#if error}\n                    &lt;div class=&quot;alert alert-danger&quot; role=&quot;alert&quot;&gt;{error}&lt;\/div&gt;\n                {\/if}\n\n                &lt;form on:submit|preventDefault={submit}&gt;\n                    &lt;fieldset class=&quot;form-group&quot;&gt;\n                        &lt;input class=&quot;form-control form-control-lg&quot; type=&quot;text&quot; required placeholder=&quot;Username&quot; bind:value={username}&gt;\n                    &lt;\/fieldset&gt;\n                    &lt;br&gt;\n                    &lt;fieldset class=&quot;form-group&quot;&gt;\n                        &lt;input class=&quot;form-control form-control-lg&quot; type=&quot;password&quot; required placeholder=&quot;Password&quot; bind:value={password}&gt;\n                    &lt;\/fieldset&gt;\n                    &lt;br&gt;\n                    &lt;button class=&quot;btn btn-lg btn-primary pull-xs-right&quot; type=&quot;submit&quot;&gt;\n                        Sign in\n                    &lt;\/button&gt;\n                &lt;\/form&gt;\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n<\/pre><\/div>\n\n\n<p>everything that needs to be changed in the server.js file, I will immediately send the code and it still needs to be downloaded there<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport sirv from &#039;sirv&#039;;\nimport polka from &#039;polka&#039;;\nimport compression from &#039;compression&#039;;\nimport * as sapper from &#039;@sapper\/server&#039;;\nimport session from &quot;express-session&quot;;\nimport sessionFileStore from &quot;session-file-store&quot;;\n\nconst FileStore = sessionFileStore(session);\n\nconst { PORT, NODE_ENV } = process.env;\nconst dev = NODE_ENV === &#039;development&#039;;\nconst {json} = require(&#039;body-parser&#039;);\n\npolka() \/\/ You can also use Express\n\t.use(\n\t\tcompression({ threshold: 0 }),\n\t\tjson(),\n\t\tsirv(&#039;static&#039;, { dev }),\n\t\tsession({\n\t\t\tsecret: &#039;conduit&#039;,\n\t\t\tresave: false,\n\t\t\tsaveUninitialized: true,\n\t\t\tcookie: {\n\t\t\t\tmaxAge: 31536000\n\t\t\t},\n\t\t\tstore: new FileStore({\n\t\t\t\tpath: `.sessions`\n\t\t\t})\n\t\t}),\n\t\tsapper.middleware({\n\t\t\tsession: req =&gt; ({\n\t\t\t\tuser: req.session &amp;amp;&amp;amp; req.session.user,\n\t\t\t\ttoken: req.session &amp;amp;&amp;amp; req.session.token\n\t\t\t})\n\t\t})\n\t)\n\t.listen(PORT, err =&gt; {\n\t\tif (err) console.log(&#039;error&#039;, err);\n\t})\n<\/pre><\/div>\n\n\n<p>here&#8217;s how to download<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-25.png\" alt=\"\" class=\"wp-image-1867\"\/><\/figure>\n\n\n\n<p>after logging in, you will be redirected to the home screen<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-27.png\" alt=\"\" class=\"wp-image-1869\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-33.png\" alt=\"\" class=\"wp-image-1893\"\/><\/figure>\n\n\n\n<p>5 tasks are done to make an error about login, login.js code is from above<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-29.png\" alt=\"\" class=\"wp-image-1871\"\/><figcaption class=\"wp-element-caption\">the task is done to have an exit button, I\u2019ll show the code right now<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-30-700x143.png\" alt=\"\" class=\"wp-image-1872\"\/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nimport * as api from &#039;api.js&#039;;\n\nexport function post(req, res) {\n    api.del(&#039;sessions&#039;, req.session.token ).then(response =&gt; {\n        delete req.session.token;\n        res.end(JSON.stringify(response));\n    });\n}\n<\/pre><\/div>\n\n\n<p>7 tasks are done<\/p>\n\n\n\n<p>create logout.js file and paste this code to make logout work<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-31.png\" alt=\"\" class=\"wp-image-1873\"\/><\/figure>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&amp;lt;script&gt;\n\texport let segment;\n\timport  {goto,stores} from &quot;@sapper\/app&quot;;\n\tconst {page,session} = stores();\n\timport{post} from &#039;api.js&#039;;\n\n\tasync function logout()\n\t{\n\t\tawait post(`auth\/logout`);\n\t\t$session.token=null;\n\t\tgoto(&#039;\/&#039;);\n\t}\n&amp;lt;\/script&gt;\n<\/pre><\/div>\n\n\n<p><br>you still need this script to start working, you need to put Nav.svelte<\/p>\n\n\n\n<p><br>after that the exit button works<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SVELTEJS\/SAPPER project Go to pivotaltracker and schedule a task The title is As a user i can log in and out As a user I see an overview page when I log in If this is done, let\u2019s go ahead and make the \u201clog in\u201d button in the navigation When I log in, I am [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-409","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/\" \/>\n<meta property=\"og:locale\" content=\"et_EE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio\" \/>\n<meta property=\"og:description\" content=\"SVELTEJS\/SAPPER project Go to pivotaltracker and schedule a task The title is As a user i can log in and out As a user I see an overview page when I log in If this is done, let\u2019s go ahead and make the \u201clog in\u201d button in the navigation When I log in, I am [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/\" \/>\n<meta property=\"og:site_name\" content=\"Irina Merkulova &otilde;pimapp | portfoolio\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-06T06:39:36+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"4 minutit\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/\",\"url\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/\",\"name\":\"As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio\",\"isPartOf\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png\",\"datePublished\":\"2023-10-06T06:35:55+00:00\",\"dateModified\":\"2023-10-06T06:39:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#breadcrumb\"},\"inLanguage\":\"et\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage\",\"url\":\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png\",\"contentUrl\":\"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\",\"item\":\"https:\/\/merkulova.thkit.ee\/wp20\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"As a user i can log in and out\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#website\",\"url\":\"https:\/\/merkulova.thkit.ee\/wp20\/\",\"name\":\"Veebirakenduse portfoolio\",\"description\":\"Noorem Tarkvaraarendaja eriala\",\"publisher\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/3e81f4867c46822cdeca159fa89142ae\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/merkulova.thkit.ee\/wp20\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"et\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/3e81f4867c46822cdeca159fa89142ae\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"et\",\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4c53fa504772b2274d9d09d84825a2c569865fca538b5b70247d8f1668b9eb51?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4c53fa504772b2274d9d09d84825a2c569865fca538b5b70247d8f1668b9eb51?s=96&d=mm&r=g\",\"caption\":\"admin\"},\"logo\":{\"@id\":\"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/merkulova.thkit.ee\/wp20\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/","og_locale":"et_EE","og_type":"article","og_title":"As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio","og_description":"SVELTEJS\/SAPPER project Go to pivotaltracker and schedule a task The title is As a user i can log in and out As a user I see an overview page when I log in If this is done, let\u2019s go ahead and make the \u201clog in\u201d button in the navigation When I log in, I am [&hellip;]","og_url":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/","og_site_name":"Irina Merkulova &otilde;pimapp | portfoolio","article_modified_time":"2023-10-06T06:39:36+00:00","og_image":[{"url":"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"4 minutit"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/","url":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/","name":"As a user i can log in and out - Irina Merkulova &otilde;pimapp | portfoolio","isPartOf":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/#website"},"primaryImageOfPage":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage"},"image":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage"},"thumbnailUrl":"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png","datePublished":"2023-10-06T06:35:55+00:00","dateModified":"2023-10-06T06:39:36+00:00","breadcrumb":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#breadcrumb"},"inLanguage":"et","potentialAction":[{"@type":"ReadAction","target":["https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/"]}]},{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#primaryimage","url":"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png","contentUrl":"https:\/\/blinov20.thkit.ee\/wp\/wp-content\/uploads\/2022\/10\/image-14.png"},{"@type":"BreadcrumbList","@id":"https:\/\/merkulova.thkit.ee\/wp20\/as-a-user-i-can-log-in-and-out\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430","item":"https:\/\/merkulova.thkit.ee\/wp20\/"},{"@type":"ListItem","position":2,"name":"As a user i can log in and out"}]},{"@type":"WebSite","@id":"https:\/\/merkulova.thkit.ee\/wp20\/#website","url":"https:\/\/merkulova.thkit.ee\/wp20\/","name":"Veebirakenduse portfoolio","description":"Noorem Tarkvaraarendaja eriala","publisher":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/3e81f4867c46822cdeca159fa89142ae"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/merkulova.thkit.ee\/wp20\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"et"},{"@type":["Person","Organization"],"@id":"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/3e81f4867c46822cdeca159fa89142ae","name":"admin","image":{"@type":"ImageObject","inLanguage":"et","@id":"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4c53fa504772b2274d9d09d84825a2c569865fca538b5b70247d8f1668b9eb51?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4c53fa504772b2274d9d09d84825a2c569865fca538b5b70247d8f1668b9eb51?s=96&d=mm&r=g","caption":"admin"},"logo":{"@id":"https:\/\/merkulova.thkit.ee\/wp20\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/merkulova.thkit.ee\/wp20"]}]}},"_links":{"self":[{"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/pages\/409","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/comments?post=409"}],"version-history":[{"count":4,"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/pages\/409\/revisions"}],"predecessor-version":[{"id":416,"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/pages\/409\/revisions\/416"}],"wp:attachment":[{"href":"https:\/\/merkulova.thkit.ee\/wp20\/wp-json\/wp\/v2\/media?parent=409"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}