{
    "componentChunkName": "component---src-pages-blog-markdown-remark-fields-slug-js",
    "path": "/blog/how-to-use-supertokens-pre-built-ui-with-vuejs",
    "result": {"data":{"markdownRemark":{"html":"<h2 id=\"table-of-contents\" style=\"position:relative;\"><a href=\"#table-of-contents\" aria-label=\"table of contents permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Table of Contents</h2>\n<ol>\n<li><a href=\"#introduction\">Introduction</a></li>\n<li><a href=\"#what-is-supertokens\">What is SuperTokens?</a></li>\n<li><a href=\"#the-modular-architecture-of-supertokens\">The Modular Architecture of SuperTokens</a>\n<ul>\n<li><a href=\"#frontend-sdk\">Frontend SDK</a></li>\n<li><a href=\"#backend-sdk\">Backend SDK</a></li>\n<li><a href=\"#core-microservice\">Core Microservice</a></li>\n</ul>\n</li>\n<li><a href=\"#frontend-integration\">Frontend Integration</a>\n<ul>\n<li><a href=\"#automatic-setup-using-cli\">Automatic Setup Using CLI</a></li>\n<li><a href=\"#manual-setup-steps\">Manual Setup Steps</a>\n<ul>\n<li><a href=\"#install-supertokens-web-sdk\">Install SuperTokens Web SDK</a></li>\n<li><a href=\"#create-homeviewvue\">Create HomeView.vue</a></li>\n<li><a href=\"#architecture-of-supertokens-sdk-setup\">Architecture of SuperTokens SDK Setup</a></li>\n<li><a href=\"#creating-the-auth-route\">Creating the /auth Route</a></li>\n<li><a href=\"#initialize-supertokens-in-maints\">Initialize SuperTokens in main.ts</a></li>\n<li><a href=\"#setup-routing-to-show-the-login-ui\">Setup Routing to Show the Login UI</a></li>\n<li><a href=\"#view-the-login-ui\">View the Login UI</a></li>\n</ul>\n</li>\n</ul>\n</li>\n<li><a href=\"#backend-integration\">Backend Integration</a>\n<ul>\n<li><a href=\"#install-backend-sdk\">Install Backend SDK</a></li>\n<li><a href=\"#initialize-supertokens\">Initialize SuperTokens</a></li>\n<li><a href=\"#initialize-social-login-providers\">Initialize Social Login Providers</a></li>\n<li><a href=\"#add-the-supertokens-apis--cors-setup\">Add the SuperTokens APIs &#x26; CORS Setup</a></li>\n<li><a href=\"#add-the-supertokens-error-handler\">Add the SuperTokens Error Handler</a></li>\n</ul>\n</li>\n<li><a href=\"#supertokens-core-setup\">SuperTokens Core Setup</a>\n<ul>\n<li><a href=\"#self-hosted-setup\">Self-hosted Setup</a></li>\n<li><a href=\"#managed-service\">Managed Service</a></li>\n</ul>\n</li>\n<li><a href=\"#conclusion\">Conclusion</a></li>\n</ol>\n<p>Building a secure and scalable authentication system from scratch can be a daunting task. Fortunately, SuperTokens is here to simplify the process and help you add robust authentication to your Vue.js application in no time. In this step-by-step guide, we’ll walk you through the integration of SuperTokens’ pre-built UI into your Vue.js app, allowing you to focus on building the core features of your application.</p>\n<h2 id=\"what-is-supertokens\" style=\"position:relative;\"><a href=\"#what-is-supertokens\" aria-label=\"what is supertokens permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>What is SuperTokens?</h2>\n<p>SuperTokens is an open-source project that enables you to add auth to your app quickly. It gives you a pre-built auth UI and backend APIs for an end-to-end integration experience.</p>\n<p>Before we dive into the code, let’s discuss the overall architecture.</p>\n<h2 id=\"the-modular-architecture-of-supertokens\" style=\"position:relative;\"><a href=\"#the-modular-architecture-of-supertokens\" aria-label=\"the modular architecture of supertokens permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>The Modular Architecture of SuperTokens</h2>\n<p>SuperTokens’ architecture is designed to be modular and flexible, consisting of three main components:</p>\n<ul>\n<li><strong>Frontend SDK</strong>: This is the library you’ll use in your Vue.js app to render the pre-built authentication UI, including login, signup, and password reset forms.</li>\n<li><strong>Backend SDK</strong>: This is the library you’ll use in your backend to expose the authentication-related API endpoints.</li>\n<li><strong>Core Microservice</strong>: This is the central service that handles all the authentication logic and communicates with the database. It can either be self-hosted using Docker or AWS, or it can be a managed service handled by the SuperTokens team.</li>\n</ul>\n<p>SuperTokens simplifies authentication integration by separating its components, enabling you to incorporate secure user management into your app effortlessly. This approach shields you from the intricacies of authentication systems, allowing you to focus on your core application logic.</p>\n<p>The modular structure of SuperTokens facilitates a straightforward implementation process, which we’ll explore in detail through a step-by-step guide to setting up this powerful authentication solution in your project.</p>\n<h2 id=\"frontend-integration\" style=\"position:relative;\"><a href=\"#frontend-integration\" aria-label=\"frontend integration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Frontend Integration</h2>\n<p>SuperTokens offers an easy way to integrate authentication into your Vue.js application using its pre-built UI. Whether you’re using React, Angular, or Vue.js, SuperTokens provides support across various frameworks. For mobile apps, please see the “Using your own UI” section in the SuperTokens documentation.</p>\n<h3 id=\"automatic-setup-using-cli\" style=\"position:relative;\"><a href=\"#automatic-setup-using-cli\" aria-label=\"automatic setup using cli permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Automatic Setup Using CLI</h3>\n<p>For the quickest setup, run the following command in your terminal:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"99587436216442140000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`npx create-supertokens-app@latest --recipe=thirdpartyemailpassword`, `99587436216442140000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">npx create-supertokens-app@latest --recipe<span class=\"token operator\">=</span>thirdpartyemailpassword</code></pre></div>\n<p>This command automatically sets up your project with SuperTokens’ Third-Party Email Password recipe. Once this is done, you can skip steps 1 and 2 in this section and move directly to setting up the SuperTokens core (Step 3).</p>\n<p>Alternatively, you can manually integrate SuperTokens by following the steps below.</p>\n<h3 id=\"manual-setup-steps\" style=\"position:relative;\"><a href=\"#manual-setup-steps\" aria-label=\"manual setup steps permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Manual Setup Steps</h3>\n<ol>\n<li><strong>Install SuperTokens Web SDK</strong></li>\n</ol>\n<p>    Start by installing the SuperTokens web SDK using the following command:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"36385093704485482000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`npm install supertokens-web-js`, `36385093704485482000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> supertokens-web-js</code></pre></div>\n<ol start=\"2\">\n<li><strong>Initialize the SuperTokens SDK</strong></li>\n</ol>\n<p>Before initializing the SuperTokens SDK, let’s explore how to integrate it into our Vue app.</p>\n<p>But first, let’s create a <code class=\"language-text\">HomeView</code> to have an unprotected route from which we can do the login.</p>\n<h4 id=\"create-homeviewvue\" style=\"position:relative;\"><a href=\"#create-homeviewvue\" aria-label=\"create homeviewvue permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Create HomeView.vue</h4>\n<p>Create a new file named <code class=\"language-text\">HomeView.vue</code> in your <code class=\"language-text\">src/views</code> directory and add the following code:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"28472577557717660000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`<script lang=&quot;ts&quot;>\nimport * as Session from &quot;supertokens-web-js/recipe/session&quot;;\nimport { defineComponent } from &quot;vue&quot;;\n\nexport default defineComponent({\n  data() {\n    return {\n      session: false,\n      userId: &quot;&quot;,\n    };\n  },\n  mounted() {\n    this.getUserInfo();\n  },\n  methods: {\n    redirectToLogin() {\n      window.location.href = &quot;/auth&quot;;\n    },\n    async getUserInfo() {\n      this.session = await Session.doesSessionExist();\n      if (this.session) {\n        this.userId = await Session.getUserId();\n      }\n    },\n    async onLogout() {\n      await Session.signOut();\n      window.location.reload();\n    },\n  },\n});\n</script>\n\n<template>\n  <main>\n    <div class=&quot;body&quot;>\n      <h1>Hello</h1>\n\n      <div v-if=&quot;session&quot;>\n        <span>UserId:</span>\n        <h3>{{ userId }}</h3>\n\n        <button @click=&quot;onLogout&quot;>Sign Out</button>\n      </div>\n      <div v-else>\n        <p>\n          Visit the\n          <a href=&quot;https://supertokens.com&quot;>SuperTokens tutorial</a> to learn\n          how to build Auth under a day.\n        </p>\n        <button @click=&quot;redirectToLogin&quot;>Sign in</button>\n      </div>\n    </div>\n  </main>\n</template>\n\n<style scoped>\n.body {\n  text-align: center;\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  align-items: center;\n  height: 100vh;\n}\n.user {\n  display: flex;\n  flex-direction: row;\n  justify-content: space-between;\n  align-items: baseline;\n  padding: 0.1rem;\n}\nspan {\n  margin-right: 0.3rem;\n  font-size: large;\n}\nh3 {\n  color: #ff3e00;\n}\nh1 {\n  color: #ff3e00;\n  text-transform: uppercase;\n  font-size: 4em;\n  font-weight: 100;\n}\nbutton {\n  cursor: pointer;\n  background-color: #ffb399;\n  border: none;\n  color: rgb(82, 82, 82);\n  padding: 0.75rem;\n  margin: 2rem;\n  transition: all 0.5s ease-in-out;\n  border-radius: 2rem;\n  font-size: large;\n}\nbutton:hover {\n  transform: scale(1.1);\n  background-color: #ff3e00;\n  color: white;\n}\n</style>`, `28472577557717660000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>ts<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n<span class=\"token keyword\">import</span> <span class=\"token operator\">*</span> <span class=\"token keyword\">as</span> Session <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-web-js/recipe/session\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> defineComponent <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token function\">defineComponent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n  <span class=\"token function\">data</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token literal-property property\">session</span><span class=\"token operator\">:</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">,</span>\n      <span class=\"token literal-property property\">userId</span><span class=\"token operator\">:</span> <span class=\"token string\">\"\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token function\">mounted</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span><span class=\"token function\">getUserInfo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token literal-property property\">methods</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">redirectToLogin</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      window<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">.</span>href <span class=\"token operator\">=</span> <span class=\"token string\">\"/auth\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">async</span> <span class=\"token function\">getUserInfo</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>session <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Session<span class=\"token punctuation\">.</span><span class=\"token function\">doesSessionExist</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>session<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>userId <span class=\"token operator\">=</span> <span class=\"token keyword\">await</span> Session<span class=\"token punctuation\">.</span><span class=\"token function\">getUserId</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    <span class=\"token keyword\">async</span> <span class=\"token function\">onLogout</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      <span class=\"token keyword\">await</span> Session<span class=\"token punctuation\">.</span><span class=\"token function\">signOut</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n      window<span class=\"token punctuation\">.</span>location<span class=\"token punctuation\">.</span><span class=\"token function\">reload</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n  <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>main</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">class</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>body<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h1</span><span class=\"token punctuation\">></span></span>Hello<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h1</span><span class=\"token punctuation\">></span></span>\n\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">v-if</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>session<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>span</span><span class=\"token punctuation\">></span></span>UserId:<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>span</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>h3</span><span class=\"token punctuation\">></span></span>{{ userId }}<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>h3</span><span class=\"token punctuation\">></span></span>\n\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">@click</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>onLogout<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Sign Out<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">v-else</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>p</span><span class=\"token punctuation\">></span></span>\n          Visit the\n          <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>a</span> <span class=\"token attr-name\">href</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>https://supertokens.com<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>SuperTokens tutorial<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>a</span><span class=\"token punctuation\">></span></span> to learn\n          how to build Auth under a day.\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>p</span><span class=\"token punctuation\">></span></span>\n        <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>button</span> <span class=\"token attr-name\">@click</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>redirectToLogin<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span>Sign in<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>button</span><span class=\"token punctuation\">></span></span>\n      <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>div</span><span class=\"token punctuation\">></span></span>\n  <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>main</span><span class=\"token punctuation\">></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>style</span> <span class=\"token attr-name\">scoped</span><span class=\"token punctuation\">></span></span><span class=\"token style\"><span class=\"token language-css\">\n<span class=\"token selector\">.body</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">text-align</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">flex-direction</span><span class=\"token punctuation\">:</span> column<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> center<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">height</span><span class=\"token punctuation\">:</span> 100vh<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">.user</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">display</span><span class=\"token punctuation\">:</span> flex<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">flex-direction</span><span class=\"token punctuation\">:</span> row<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">justify-content</span><span class=\"token punctuation\">:</span> space-between<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">align-items</span><span class=\"token punctuation\">:</span> baseline<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 0.1rem<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">span</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">margin-right</span><span class=\"token punctuation\">:</span> 0.3rem<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> large<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">h3</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> #ff3e00<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">h1</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> #ff3e00<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">text-transform</span><span class=\"token punctuation\">:</span> uppercase<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> 4em<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-weight</span><span class=\"token punctuation\">:</span> 100<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">button</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">cursor</span><span class=\"token punctuation\">:</span> pointer<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #ffb399<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border</span><span class=\"token punctuation\">:</span> none<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> <span class=\"token function\">rgb</span><span class=\"token punctuation\">(</span>82<span class=\"token punctuation\">,</span> 82<span class=\"token punctuation\">,</span> 82<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">padding</span><span class=\"token punctuation\">:</span> 0.75rem<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">margin</span><span class=\"token punctuation\">:</span> 2rem<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">transition</span><span class=\"token punctuation\">:</span> all 0.5s ease-in-out<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">border-radius</span><span class=\"token punctuation\">:</span> 2rem<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">font-size</span><span class=\"token punctuation\">:</span> large<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token selector\">button:hover</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token property\">transform</span><span class=\"token punctuation\">:</span> <span class=\"token function\">scale</span><span class=\"token punctuation\">(</span>1.1<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token property\">background-color</span><span class=\"token punctuation\">:</span> #ff3e00<span class=\"token punctuation\">;</span>\n  <span class=\"token property\">color</span><span class=\"token punctuation\">:</span> white<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>style</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<h3 id=\"architecture-of-supertokens-sdk-setup\" style=\"position:relative;\"><a href=\"#architecture-of-supertokens-sdk-setup\" aria-label=\"architecture of supertokens sdk setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Architecture of SuperTokens SDK Setup</h3>\n<p>The <code class=\"language-text\">supertokens-web-js</code> SDK is responsible for session management and providing helper functions to check if a session exists or validate access token claims on the frontend. We will initialize this SDK in the root of your Vue app so that all pages can use it.</p>\n<p>We will create an <code class=\"language-text\">/auth*</code> route in the Vue app to render the pre-built UI, which will also need to be initialized, but only on that route.</p>\n<h3 id=\"creating-the-auth-route\" style=\"position:relative;\"><a href=\"#creating-the-auth-route\" aria-label=\"creating the auth route permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Creating the /auth Route</h3>\n<p>Create a new file <code class=\"language-text\">AuthView.vue</code>. This Vue component will be used to render the auth component:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"58124190617459610000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`<script lang=&quot;ts&quot;>\nimport { defineComponent, onMounted, onUnmounted } from 'vue';\nexport default defineComponent({\n    setup() {\n        const loadScript = (src: string) => {\n            const script = document.createElement('script');\n            script.type = 'text/javascript';\n            script.src = src;\n            script.id = 'supertokens-script';\n            script.onload = () => {\n                (window as any).supertokensUIInit(&quot;supertokensui&quot;, {\n                    appInfo: {\n                        appName: &quot;<YOUR_APP_NAME>&quot;,\n                        apiDomain: &quot;<YOUR_API_DOMAIN>&quot;,\n                        websiteDomain: &quot;<YOUR_WEBSITE_DOMAIN>&quot;,\n                        apiBasePath: &quot;/auth&quot;,\n                        websiteBasePath: &quot;/auth&quot;\n                    },\n                    recipeList: [\n                        (window as any).supertokensUIEmailPassword.init(),\n                        (window as any).supertokensUIThirdParty.init({\n                            signInAndUpFeature: {\n                                providers: [\n                                    (window as any).supertokensUIThirdParty.Github.init(),\n                                    (window as any).supertokensUIThirdParty.Google.init(),\n                                    (window as any).supertokensUIThirdParty.Facebook.init(),\n                                    (window as any).supertokensUIThirdParty.Apple.init(),\n                                ]\n                            }\n                        }),\n                        (window as any).supertokensUISession.init(),\n                    ],\n                });\n            };\n            document.body.appendChild(script);\n        };\n\n        onMounted(() => {\n            loadScript('https://cdn.jsdelivr.net/gh/supertokens/prebuiltui@v0.47.0/build/static/js/main.00ec3e91.js');\n        });\n\n        onUnmounted(() => {\n            const script = document.getElementById('supertokens-script');\n            if (script) {\n                script.remove();\n            }\n        });\n    },\n});\n</script>\n\n<template>\n    <div id=&quot;supertokensui&quot; />\n</template>`, `58124190617459610000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"html\"><pre class=\"language-html\"><code class=\"language-html\"><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>script</span> <span class=\"token attr-name\">lang</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>ts<span class=\"token punctuation\">\"</span></span><span class=\"token punctuation\">></span></span><span class=\"token script\"><span class=\"token language-javascript\">\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> defineComponent<span class=\"token punctuation\">,</span> onMounted<span class=\"token punctuation\">,</span> onUnmounted <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">'vue'</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> <span class=\"token function\">defineComponent</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    <span class=\"token function\">setup</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">const</span> <span class=\"token function-variable function\">loadScript</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token parameter\"><span class=\"token literal-property property\">src</span><span class=\"token operator\">:</span> string</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">const</span> script <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">createElement</span><span class=\"token punctuation\">(</span><span class=\"token string\">'script'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            script<span class=\"token punctuation\">.</span>type <span class=\"token operator\">=</span> <span class=\"token string\">'text/javascript'</span><span class=\"token punctuation\">;</span>\n            script<span class=\"token punctuation\">.</span>src <span class=\"token operator\">=</span> src<span class=\"token punctuation\">;</span>\n            script<span class=\"token punctuation\">.</span>id <span class=\"token operator\">=</span> <span class=\"token string\">'supertokens-script'</span><span class=\"token punctuation\">;</span>\n            script<span class=\"token punctuation\">.</span><span class=\"token function-variable function\">onload</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n                <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span><span class=\"token function\">supertokensUIInit</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"supertokensui\"</span><span class=\"token punctuation\">,</span> <span class=\"token punctuation\">{</span>\n                    <span class=\"token literal-property property\">appInfo</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                        <span class=\"token literal-property property\">appName</span><span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_APP_NAME>\"</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">apiDomain</span><span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_API_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">websiteDomain</span><span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_WEBSITE_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">apiBasePath</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token literal-property property\">websiteBasePath</span><span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token literal-property property\">recipeList</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                        <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIEmailPassword<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIThirdParty<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n                            <span class=\"token literal-property property\">signInAndUpFeature</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                                <span class=\"token literal-property property\">providers</span><span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                                    <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIThirdParty<span class=\"token punctuation\">.</span>Github<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                                    <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIThirdParty<span class=\"token punctuation\">.</span>Google<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                                    <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIThirdParty<span class=\"token punctuation\">.</span>Facebook<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                                    <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUIThirdParty<span class=\"token punctuation\">.</span>Apple<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                                <span class=\"token punctuation\">]</span>\n                            <span class=\"token punctuation\">}</span>\n                        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                        <span class=\"token punctuation\">(</span>window <span class=\"token keyword\">as</span> any<span class=\"token punctuation\">)</span><span class=\"token punctuation\">.</span>supertokensUISession<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n                <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n            document<span class=\"token punctuation\">.</span>body<span class=\"token punctuation\">.</span><span class=\"token function\">appendChild</span><span class=\"token punctuation\">(</span>script<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">onMounted</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token function\">loadScript</span><span class=\"token punctuation\">(</span><span class=\"token string\">'https://cdn.jsdelivr.net/gh/supertokens/prebuiltui@v0.47.0/build/static/js/main.00ec3e91.js'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">onUnmounted</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n            <span class=\"token keyword\">const</span> script <span class=\"token operator\">=</span> document<span class=\"token punctuation\">.</span><span class=\"token function\">getElementById</span><span class=\"token punctuation\">(</span><span class=\"token string\">'supertokens-script'</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>script<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n                script<span class=\"token punctuation\">.</span><span class=\"token function\">remove</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</span></span><span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>script</span><span class=\"token punctuation\">></span></span>\n\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>template</span><span class=\"token punctuation\">></span></span>\n    <span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;</span>div</span> <span class=\"token attr-name\">id</span><span class=\"token attr-value\"><span class=\"token punctuation attr-equals\">=</span><span class=\"token punctuation\">\"</span>supertokensui<span class=\"token punctuation\">\"</span></span> <span class=\"token punctuation\">/></span></span>\n<span class=\"token tag\"><span class=\"token tag\"><span class=\"token punctuation\">&lt;/</span>template</span><span class=\"token punctuation\">></span></span></code></pre></div>\n<p>In the <code class=\"language-text\">loadScript</code> function, we provide the SuperTokens config for the UI. This includes email-password, session, and social login recipes with GitHub, Google, Facebook, and Apple login buttons.</p>\n<h3 id=\"maints\" style=\"position:relative;\"><a href=\"#maints\" aria-label=\"maints permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>main.ts</h3>\n<p>Next, initialize the <code class=\"language-text\">supertokens-web-js</code> SDK in your Vue app’s <code class=\"language-text\">main.ts</code> file. This will provide session management across your entire application.</p>\n<p>Copy and paste this in your <code class=\"language-text\">main.ts</code>:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"54483906521170610000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import { createApp } from &quot;vue&quot;;\nimport SuperTokens from &quot;supertokens-web-js&quot;;\nimport Session from &quot;supertokens-web-js/recipe/session&quot;;\nimport App from &quot;./App.vue&quot;;\nimport router from &quot;./router&quot;;\n\nSuperTokens.init({\n    appInfo: {\n        appName: &quot;<YOUR_APP_NAME>&quot;,\n        apiDomain: &quot;<YOUR_API_DOMAIN>&quot;,\n        apiBasePath: &quot;/auth&quot;,\n    },\n    recipeList: [\n        Session.init(),\n    ],\n});\n\nconst app = createApp(App);\n\napp.use(router);\napp.mount(&quot;#app&quot;);`, `54483906521170610000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> createApp <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> SuperTokens <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-web-js\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Session <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-web-js/recipe/session\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> App <span class=\"token keyword\">from</span> <span class=\"token string\">\"./App.vue\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> router <span class=\"token keyword\">from</span> <span class=\"token string\">\"./router\"</span><span class=\"token punctuation\">;</span>\n\nSuperTokens<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    appInfo<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        appName<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_APP_NAME>\"</span><span class=\"token punctuation\">,</span>\n        apiDomain<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_API_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n        apiBasePath<span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    recipeList<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        Session<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> app <span class=\"token operator\">=</span> <span class=\"token function\">createApp</span><span class=\"token punctuation\">(</span>App<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span>router<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">mount</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"#app\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"3-setup-routing-to-show-the-login-ui\" style=\"position:relative;\"><a href=\"#3-setup-routing-to-show-the-login-ui\" aria-label=\"3 setup routing to show the login ui permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3) Setup Routing to Show the Login UI</h3>\n<p>Update your Vue router so that all auth-related requests load the <code class=\"language-text\">AuthView</code> component.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"41191464232887200000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import { createRouter, createWebHistory } from &quot;vue-router&quot;;\\\nimport HomeView from &quot;../views/HomeView.vue&quot;;\\\nimport AuthView from &quot;../views/AuthView.vue&quot;;\n\nconst router = createRouter({\\\n    history: createWebHistory(import.meta.env.BASE_URL),\\\n    routes: [\\\n        {\\\n            path: &quot;/&quot;,\\\n            name: &quot;home&quot;,\\\n            component: HomeView,\\\n        },\\\n        {\\\n            path: &quot;/auth&quot;,\\\n            name: &quot;auth&quot;,\\\n            component: AuthView,\\\n        },\\\n    ],\\\n});\n\nexport default router;`, `41191464232887200000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> createRouter<span class=\"token punctuation\">,</span> createWebHistory <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"vue-router\"</span><span class=\"token punctuation\">;</span>\\\n<span class=\"token keyword\">import</span> HomeView <span class=\"token keyword\">from</span> <span class=\"token string\">\"../views/HomeView.vue\"</span><span class=\"token punctuation\">;</span>\\\n<span class=\"token keyword\">import</span> AuthView <span class=\"token keyword\">from</span> <span class=\"token string\">\"../views/AuthView.vue\"</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">const</span> router <span class=\"token operator\">=</span> <span class=\"token function\">createRouter</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\\\n    history<span class=\"token operator\">:</span> <span class=\"token function\">createWebHistory</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">import</span><span class=\"token punctuation\">.</span>meta<span class=\"token punctuation\">.</span>env<span class=\"token punctuation\">.</span><span class=\"token constant\">BASE_URL</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\\\n    routes<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\\\n        <span class=\"token punctuation\">{</span>\\\n            path<span class=\"token operator\">:</span> <span class=\"token string\">\"/\"</span><span class=\"token punctuation\">,</span>\\\n            name<span class=\"token operator\">:</span> <span class=\"token string\">\"home\"</span><span class=\"token punctuation\">,</span>\\\n            component<span class=\"token operator\">:</span> HomeView<span class=\"token punctuation\">,</span>\\\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\\\n        <span class=\"token punctuation\">{</span>\\\n            path<span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span><span class=\"token punctuation\">,</span>\\\n            name<span class=\"token operator\">:</span> <span class=\"token string\">\"auth\"</span><span class=\"token punctuation\">,</span>\\\n            component<span class=\"token operator\">:</span> AuthView<span class=\"token punctuation\">,</span>\\\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\\\n    <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\\\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n<span class=\"token keyword\">export</span> <span class=\"token keyword\">default</span> router<span class=\"token punctuation\">;</span></code></pre></div>\n<h3 id=\"4-view-the-login-ui\" style=\"position:relative;\"><a href=\"#4-view-the-login-ui\" aria-label=\"4 view the login ui permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4) View the Login UI</h3>\n<p>You can view the login UI by visiting /auth in your browser. You can also see all the designs of the pre-built UI for each page on this <a href=\"https://master--6571be2867f75556541fde98.chromatic.com/?path=/story/auth-page--playground\" target=\"_blank\" rel=\"nofollow\">link</a>.\n<span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 630px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 122.15189873417722%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAYCAYAAAD6S912AAAACXBIWXMAAA7DAAAOwwHHb6hkAAACGUlEQVQ4y5VVTY/TMBDdv8MFDmiRKBIrEB8SnPgBXJAQ4sQ/QeLA/9pumsKlcGjVps1Hk9SOHTvpQ+PW2WSbTc1II6f25OXNmxn3Yr/fg5ysrmtUVdVx2mvb3fN2DOFcWDBa6cB+wO5rrTCbzTCfz5EkcRPbfk9rPQxofxtGWmM8HsOf+gjDsBeQWJ5lSLbb7RDHsVk5Y8i4wioHpD6+8z+Abad94z1nTil3QAb8LKClHoYRwigyz0mSYLPZGP2CYI0syzs6OgGWUkAKbjSSUkII0axlWZ5kc3/KR0BVcgjBOgyjKMJ6vUaapk3PWtCzDLdpagDIGGOIk8QAxVEEIWRHYzfA7dawIiuKwoAWhUCeZyZ1y9BZQ6vXYVK0KUgUhSZ9inFmaGeSAmwQ7dEHpDwUpK9XnUavnZa9FO62iyNgjSAIjGbW9vdMiPMsUxHyPAfjzDwrpRoZlLKuGj3PakiBVBTO+QlgVWnU1XGtKzcNV8slFouFYXJ7qR6qmvAKQXZwXpr7xoGh1uCcoTz23JA5aTj78xfXNx68iY8bz8fE/wV/+hveZGr2Jv4U12MPy1XQtNkAIPD56zc8fPwMT6/e4HL0Aq/ffcDHT1/w/NV7XI5eYnT1Fg8ePcH3Hz+bQRhMOU0zbDahucL6PTbnjPN+hu3mtXrYK55RtaXEriiQUdWF6P0X7AW0LCnAtkmp1InftlB18sf2D3mLR0GAxq/oAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"login form\"\n        title=\"login form\"\n        src=\"/static/f86db22a3c7826a67ba920152fa01d2e/f058b/st-loginform.png\"\n        srcset=\"/static/f86db22a3c7826a67ba920152fa01d2e/c26ae/st-loginform.png 158w,\n/static/f86db22a3c7826a67ba920152fa01d2e/6bdcf/st-loginform.png 315w,\n/static/f86db22a3c7826a67ba920152fa01d2e/f058b/st-loginform.png 630w,\n/static/f86db22a3c7826a67ba920152fa01d2e/f1d1f/st-loginform.png 739w\"\n        sizes=\"(max-width: 630px) 100vw, 630px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n        decoding=\"async\"\n      />\n    </span></p>\n<p>At this stage, you’ve successfully integrated your front end with SuperTokens. The next section will guide you through setting up your backend.</p>\n<h3 id=\"backend-integration\" style=\"position:relative;\"><a href=\"#backend-integration\" aria-label=\"backend integration permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Backend Integration</h3>\n<p>SuperTokens provides a powerful backend authentication service that can be easily integrated with various backend frameworks like Node.js, GoLang, Python, and others. This guide will walk you through setting up SuperTokens with Node.js, specifically using Express.</p>\n<h4 id=\"1-install-backend-sdk\" style=\"position:relative;\"><a href=\"#1-install-backend-sdk\" aria-label=\"1 install backend sdk permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>1. Install Backend SDK</h4>\n<p>Begin by installing the SuperTokens Node SDK via npm:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"28167315296448713000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`npm install supertokens-node`, `28167315296448713000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token function\">npm</span> <span class=\"token function\">install</span> supertokens-node</code></pre></div>\n<h4 id=\"2-initialize-supertokens\" style=\"position:relative;\"><a href=\"#2-initialize-supertokens\" aria-label=\"2 initialize supertokens permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>2. Initialize SuperTokens</h4>\n<p>To get started, you need to initialize SuperTokens in your server’s initialization file. Here’s how you can do it with Node.js:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"74633259996915140000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import supertokens from &quot;supertokens-node&quot;;\nimport Session from &quot;supertokens-node/recipe/session&quot;;\nimport EmailPassword from &quot;supertokens-node/recipe/emailpassword&quot;;\nimport ThirdParty from &quot;supertokens-node/recipe/thirdparty&quot;;\n\n\nsupertokens.init({\n    framework: &quot;express&quot;,\n    supertokens: {\n        // Replace with your core instance URL or self-hosted core\n        connectionURI: &quot;https://try.supertokens.com&quot;,\n        // apiKey: &quot;<API_KEY(if configured)>&quot;,\n    },\n    appInfo: {\n        // Information about your app\n        appName: &quot;<YOUR_APP_NAME>&quot;,\n        apiDomain: &quot;<YOUR_API_DOMAIN>&quot;,\n        websiteDomain: &quot;<YOUR_WEBSITE_DOMAIN>&quot;,\n        apiBasePath: &quot;/auth&quot;,  // The base path for SuperTokens APIs\n        websiteBasePath: &quot;/auth&quot;  // The base path where the login UI will be rendered\n    },\n    recipeList: [\n        EmailPassword.init(),\n        ThirdParty.init({\n            // Add third-party login providers in the next step\n        }),\n        Session.init(), // Initializes session features\n    ]\n});\n`, `74633259996915140000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> supertokens <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> Session <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node/recipe/session\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> EmailPassword <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node/recipe/emailpassword\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> ThirdParty <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node/recipe/thirdparty\"</span><span class=\"token punctuation\">;</span>\n\n\nsupertokens<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    framework<span class=\"token operator\">:</span> <span class=\"token string\">\"express\"</span><span class=\"token punctuation\">,</span>\n    supertokens<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Replace with your core instance URL or self-hosted core</span>\n        connectionURI<span class=\"token operator\">:</span> <span class=\"token string\">\"https://try.supertokens.com\"</span><span class=\"token punctuation\">,</span>\n        <span class=\"token comment\">// apiKey: \"&lt;API_KEY(if configured)>\",</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    appInfo<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token comment\">// Information about your app</span>\n        appName<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_APP_NAME>\"</span><span class=\"token punctuation\">,</span>\n        apiDomain<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_API_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n        websiteDomain<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_WEBSITE_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n        apiBasePath<span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span><span class=\"token punctuation\">,</span>  <span class=\"token comment\">// The base path for SuperTokens APIs</span>\n        websiteBasePath<span class=\"token operator\">:</span> <span class=\"token string\">\"/auth\"</span>  <span class=\"token comment\">// The base path where the login UI will be rendered</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    recipeList<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n        EmailPassword<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        ThirdParty<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            <span class=\"token comment\">// Add third-party login providers in the next step</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n        Session<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span> <span class=\"token comment\">// Initializes session features</span>\n    <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n</code></pre></div>\n<h3 id=\"3-initialize-social-login-providers\" style=\"position:relative;\"><a href=\"#3-initialize-social-login-providers\" aria-label=\"3 initialize social login providers permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>3) Initialize Social Login Providers</h3>\n<p>To enable third-party authentication, populate the providers array with the relevant OAuth providers. Here’s an example:</p>\n<p>Copy this code and replace SuperTokens.init() in the above server initialization file:</p>\n<h3 id=\"final-thoughts\" style=\"position:relative;\"><a href=\"#final-thoughts\" aria-label=\"final thoughts permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Final Thoughts</h3>\n<p>With just a few lines of code, you’ve added a fully functional, pre-built authentication UI to your Vue.js application. SuperTokens allows you to integrate email/password and social logins easily, and its modular architecture ensures that it’s flexible enough for your specific use case.</p>\n<p>For more advanced use cases, such as customizing the login UI or handling multiple recipes in parallel, be sure to check out the official SuperTokens documentation.</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"82929159856589880000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`SuperTokens.init({\n    appInfo: {\n        apiDomain: &quot;<YOUR_API_DOMAIN>&quot;,\n        appName: &quot;<YOUR_APP_NAME>&quot;,\n        websiteDomain: &quot;<YOUR_WEBSITE_DOMAIN>&quot;,\n    },\n    recipeList: [\n   EmailPassword.init()\n        ThirdParty.init({\n            signInAndUpFeature: {\n                providers: [\n                    {\n                        config: {\n                            thirdPartyId: &quot;google&quot;,\n                            clients: [{\n                                clientId: &quot;YOUR_GOOGLE_CLIENT_ID&quot;,\n                                clientSecret: &quot;YOUR_GOOGLE_CLIENT_SECRET&quot;\n                            }]\n                        }\n                    },\n                    {\n                        config: {\n                            thirdPartyId: &quot;github&quot;,\n                            clients: [{\n                                clientId: &quot;YOUR_GITHUB_CLIENT_ID&quot;,\n                                clientSecret: &quot;YOUR_GITHUB_CLIENT_SECRET&quot;\n                            }]\n                        }\n                    },\n                    {\n                        config: {\n                            thirdPartyId: &quot;apple&quot;,\n                            clients: [{\n                                clientId: &quot;YOUR_APPLE_CLIENT_ID&quot;,\n                                additionalConfig: {\n                                    keyId: &quot;YOUR_KEY_ID&quot;,\n                                    privateKey: &quot;YOUR_PRIVATE_KEY&quot;,\n                                    teamId: &quot;YOUR_TEAM_ID&quot;\n                                }\n                            }]\n                        }\n                    }\n                ],\n            }\n        }),\n       \n    ]\n});`, `82929159856589880000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\">SuperTokens<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    appInfo<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n        apiDomain<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_API_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n        appName<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_APP_NAME>\"</span><span class=\"token punctuation\">,</span>\n        websiteDomain<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_WEBSITE_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n    recipeList<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n   EmailPassword<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n        ThirdParty<span class=\"token punctuation\">.</span><span class=\"token function\">init</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n            signInAndUpFeature<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                providers<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span>\n                    <span class=\"token punctuation\">{</span>\n                        config<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                            thirdPartyId<span class=\"token operator\">:</span> <span class=\"token string\">\"google\"</span><span class=\"token punctuation\">,</span>\n                            clients<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span>\n                                clientId<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_GOOGLE_CLIENT_ID\"</span><span class=\"token punctuation\">,</span>\n                                clientSecret<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_GOOGLE_CLIENT_SECRET\"</span>\n                            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n                        <span class=\"token punctuation\">}</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token punctuation\">{</span>\n                        config<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                            thirdPartyId<span class=\"token operator\">:</span> <span class=\"token string\">\"github\"</span><span class=\"token punctuation\">,</span>\n                            clients<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span>\n                                clientId<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_GITHUB_CLIENT_ID\"</span><span class=\"token punctuation\">,</span>\n                                clientSecret<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_GITHUB_CLIENT_SECRET\"</span>\n                            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n                        <span class=\"token punctuation\">}</span>\n                    <span class=\"token punctuation\">}</span><span class=\"token punctuation\">,</span>\n                    <span class=\"token punctuation\">{</span>\n                        config<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                            thirdPartyId<span class=\"token operator\">:</span> <span class=\"token string\">\"apple\"</span><span class=\"token punctuation\">,</span>\n                            clients<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">{</span>\n                                clientId<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_APPLE_CLIENT_ID\"</span><span class=\"token punctuation\">,</span>\n                                additionalConfig<span class=\"token operator\">:</span> <span class=\"token punctuation\">{</span>\n                                    keyId<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_KEY_ID\"</span><span class=\"token punctuation\">,</span>\n                                    privateKey<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_PRIVATE_KEY\"</span><span class=\"token punctuation\">,</span>\n                                    teamId<span class=\"token operator\">:</span> <span class=\"token string\">\"YOUR_TEAM_ID\"</span>\n                                <span class=\"token punctuation\">}</span>\n                            <span class=\"token punctuation\">}</span><span class=\"token punctuation\">]</span>\n                        <span class=\"token punctuation\">}</span>\n                    <span class=\"token punctuation\">}</span>\n                <span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n            <span class=\"token punctuation\">}</span>\n        <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n       \n    <span class=\"token punctuation\">]</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Ensure that you replace the placeholder values (“YOUR_GOOGLE_CLIENT_ID”, “YOUR_GOOGLE_CLIENT_SECRET”, etc.) with your actual OAuth credentials. For production, make sure to use your own OAuth keys.</p>\n<h3 id=\"4-add-the-supertokens-apis--cors-setup\" style=\"position:relative;\"><a href=\"#4-add-the-supertokens-apis--cors-setup\" aria-label=\"4 add the supertokens apis  cors setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>4) Add the SuperTokens APIs &#x26; CORS Setup</h3>\n<p>You need to set up middleware in your Express application to handle SuperTokens’ APIs and manage CORS. Add this configuration before all your routes in your backend’s index.ts:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"37452986307259910000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import express from &quot;express&quot;;\nimport cors from &quot;cors&quot;;\nimport supertokens from &quot;supertokens-node&quot;;\nimport { middleware } from &quot;supertokens-node/framework/express&quot;;\n\n\nlet app = express();\n\n\napp.use(cors({\n    origin: &quot;<YOUR_WEBSITE_DOMAIN>&quot;,\n    allowedHeaders: [&quot;content-type&quot;, ...supertokens.getAllCORSHeaders()],\n    credentials: true,\n}));\n\n\n// IMPORTANT: CORS should be configured before the SuperTokens middleware.\napp.use(middleware());\n\n\n// Define your API routes here`, `37452986307259910000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> express <span class=\"token keyword\">from</span> <span class=\"token string\">\"express\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> cors <span class=\"token keyword\">from</span> <span class=\"token string\">\"cors\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> supertokens <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> middleware <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node/framework/express\"</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">let</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token function\">cors</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span>\n    origin<span class=\"token operator\">:</span> <span class=\"token string\">\"&lt;YOUR_WEBSITE_DOMAIN>\"</span><span class=\"token punctuation\">,</span>\n    allowedHeaders<span class=\"token operator\">:</span> <span class=\"token punctuation\">[</span><span class=\"token string\">\"content-type\"</span><span class=\"token punctuation\">,</span> <span class=\"token operator\">...</span>supertokens<span class=\"token punctuation\">.</span><span class=\"token function\">getAllCORSHeaders</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span>\n    credentials<span class=\"token operator\">:</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">,</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token comment\">// IMPORTANT: CORS should be configured before the SuperTokens middleware.</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token function\">middleware</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token comment\">// Define your API routes here</span></code></pre></div>\n<p>This middleware setup adds several key APIs, including:</p>\n<ul>\n<li>POST /auth/signinup: For signing up/signing in a user using a third-party provider.</li>\n<li>POST /auth/signup: For signing up a user with email &#x26; password.</li>\n<li>POST /auth/signin: For signing in a user with email &#x26; password.</li>\n</ul>\n<h3 id=\"5-add-the-supertokens-error-handler\" style=\"position:relative;\"><a href=\"#5-add-the-supertokens-error-handler\" aria-label=\"5 add the supertokens error handler permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>5) Add the SuperTokens Error Handler</h3>\n<p>To properly handle errors related to SuperTokens, add the following error handler middleware after your routes in your backend’s index.ts:</p>\n<div\n              class=\"gatsby-code-button-container\"\n              data-toaster-id=\"17921980018644935000\"\n              data-toaster-class=\"gatsby-code-button-toaster\"\n              data-toaster-text-class=\"gatsby-code-button-toaster-text\"\n              data-toaster-text=\"Copied!\"\n              data-toaster-duration=\"3500\"\n              onClick=\"copyToClipboard(`import { errorHandler } from &quot;supertokens-node/framework/express&quot;;\nimport express from &quot;express&quot;;\n\n\nlet app = express();\n\n\n// Define your API routes here\n\n\n// Add the SuperTokens error handler after your routes\napp.use(errorHandler());\n\n\n// Your custom error handler\napp.use((err, req, res, next) => {\n    // Handle errors\n});`, `17921980018644935000`)\"\n            >\n              <div\n                class=\"gatsby-code-button\"\n                data-tooltip=\"\"\n              >\n                <svg class=\"gatsby-code-button-icon\" xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"none\" d=\"M0 0h24v24H0V0z\"/><path d=\"M16 1H2v16h2V3h12V1zm-1 4l6 6v12H6V5h9zm-1 7h5.5L14 6.5V12z\"/></svg>\n              </div>\n            </div>\n<div class=\"gatsby-highlight\" data-language=\"ts\"><pre class=\"language-ts\"><code class=\"language-ts\"><span class=\"token keyword\">import</span> <span class=\"token punctuation\">{</span> errorHandler <span class=\"token punctuation\">}</span> <span class=\"token keyword\">from</span> <span class=\"token string\">\"supertokens-node/framework/express\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token keyword\">import</span> express <span class=\"token keyword\">from</span> <span class=\"token string\">\"express\"</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token keyword\">let</span> app <span class=\"token operator\">=</span> <span class=\"token function\">express</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token comment\">// Define your API routes here</span>\n\n\n<span class=\"token comment\">// Add the SuperTokens error handler after your routes</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token function\">errorHandler</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n\n<span class=\"token comment\">// Your custom error handler</span>\napp<span class=\"token punctuation\">.</span><span class=\"token function\">use</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>err<span class=\"token punctuation\">,</span> req<span class=\"token punctuation\">,</span> res<span class=\"token punctuation\">,</span> next<span class=\"token punctuation\">)</span> <span class=\"token operator\">=></span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// Handle errors</span>\n<span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"supertokens-core-setup\" style=\"position:relative;\"><a href=\"#supertokens-core-setup\" aria-label=\"supertokens core setup permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>SuperTokens Core Setup</h2>\n<p>During the backend setup, we are using <a href=\"https://try.supertokens.com\" target=\"_blank\" rel=\"nofollow\">https://try.supertokens.com</a> as the connectionURI for the Core, which is a demo instance hosted by the SuperTokens team. This instance is available for as long as needed, but once you decide to fully integrate SuperTokens into your application, it’s recommended to transition to either a self-hosted or managed version of the Core.</p>\n<p>For a <a href=\"https://supertokens.com/docs/thirdpartyemailpassword/pre-built-ui/setup/core/without-docker\" target=\"_blank\" rel=\"nofollow\">self-hosted</a> setup, you can deploy the Core using <a href=\"https://supertokens.com/docs/thirdpartyemailpassword/pre-built-ui/setup/core/with-docker\" target=\"_blank\" rel=\"nofollow\">Docker</a> or through cloud platforms like <a href=\"https://supertokens.com/docs/thirdpartyemailpassword/pre-built-ui/setup/core/aws-setup-with-stacksnap\" target=\"_blank\" rel=\"nofollow\">AWS</a>. This option offers greater control over your infrastructure, allowing you to customize the deployment according to your specific needs.</p>\n<p>Alternatively, SuperTokens offers a <a href=\"https://supertokens.com/docs/thirdpartyemailpassword/pre-built-ui/setup/core/saas-setup\" target=\"_blank\" rel=\"nofollow\">managed service</a>, where they handle the hosting and maintenance of the Core for you. This option provides the advantage of reduced operational overhead, as the SuperTokens team manages updates, scaling, and security for you.</p>\n<h2 id=\"conclusion\" style=\"position:relative;\"><a href=\"#conclusion\" aria-label=\"conclusion permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Conclusion</h2>\n<p>By following this guide, you’ve successfully integrated SuperTokens’ pre-built authentication UI into your Vue.js application. With this setup in place, you can now concentrate on developing your app’s core features, while SuperTokens takes care of the complexities of user authentication.</p>\n<p>For additional information and advanced use cases, be sure to explore the detailed <a href=\"https://supertokens.com/docs/thirdpartyemailpassword/introduction\" target=\"_blank\" rel=\"nofollow\">documentation</a> available on the SuperTokens website. Should you have any questions or require further assistance, the SuperTokens team is always ready to help.</p>","frontmatter":{"date":"September 01, 2024","title":"How to use SuperTokens' pre built UI with VueJS","cover":"vue-st.png","author":"Mostafa Ibrahim","description":"A step by step guide on how to integrate SuperTokens' pre built UI in a VueJS app"},"fields":{"slug":"/how-to-use-supertokens-pre-built-ui-with-vuejs/"}},"site":{"siteMetadata":{"title":"SuperTokens Blog"}}},"pageContext":{"id":"80009dbd-007b-5fc8-99bf-bc56e4dbb596","fields__slug":"/how-to-use-supertokens-pre-built-ui-with-vuejs/","__params":{"fields__slug":"how-to-use-supertokens-pre-built-ui-with-vuejs"}}},
    "staticQueryHashes": []}