Как использовать предварительно созданный пользовательский интерфейс SuperTokens с VueJS
Создание собственной службы аутентификации может быть утомительным, сложным и трудоемким. Чтобы сэкономить время, разработчики часто прибегают к использованию сторонних сервисов для аутентификации. Этот пост расскажет вам, как добавить аутентификацию в приложение VueJS с помощью SuperTokens.
SuperTokens — это проект с открытым исходным кодом, который позволяет быстро добавить аутентификацию в ваше приложение. Он предоставляет вам предварительно созданный пользовательский интерфейс для аутентификации и серверные API для сквозной интеграции.
Прежде чем мы углубимся в код, давайте обсудим общую архитектуру.
Архитектура
SuperToken состоит из трех компонентов:
Мы будем использовать внешний SDK SuperTokens в нашем приложении Vue, чтобы добавить все формы аутентификации (логин, регистрация, сброс пароля и т. д.). Вы также можете создать свой собственный пользовательский интерфейс, используя вспомогательные функции из внешних SDK, но в этом блоге мы сосредоточимся на предварительно созданном пользовательском интерфейсе.
Готовый пользовательский интерфейс представляет собой компоненты ReactJS (provided by the supertokens-auth-react library
). Чтобы использовать их, нам нужно будет визуализировать компоненты React в нашем приложении VueJS.
Для серверной части мы будем использовать NodeJS SDK, предоставленный SuperTokens (supertokens-node library
). Этот SDK предоставляет все API-интерфейсы аутентификации (такие как /auth/signin, /auth/signout и т. д.) через промежуточное программное обеспечение для вызова внешнего интерфейса. При вызове этих API SDK обращается к микрослужбе SuperTokens Core для чтения и записи информации в базу данных.
Базовая служба SuperTokens может быть размещена либо самостоятельно (и подключена к вашей собственной базе данных), либо размещаться командой разработчиков SuperTokens (зарегистрируйтесь на supertokens.com).
Чтобы размер пакета приложения оставался небольшим, мы ограничим использование
supertokens-auth-react
SDK для всех маршрутов, связанных с авторизацией(/auth/* by default)
и используйте более легкий, vanilla JS SDK (supertokens-web-js library
) для всех остальных маршрутов в нашем приложении. Наконец, мы воспользуемся разделением кода и отложенным импортом, чтобы убедиться, чтоsupertokens-auth-react
SDK поставляется только при посещении/auth/*
маршруты.
Интеграция с внешним интерфейсом
1. Настройка и установка
Создайте новое приложение Vue + Typescript:
npm init vue@latest
В приглашении выберите Typescript и Vue Router:
Как только это будет сделано, зайдите внутрь проекта и установите следующие зависимости:
npm i --save cors express npm-run-all react supertokens-auth-react react-dom supertokens-node
supertokens-auth-react
библиотека будет использоваться во внешнем интерфейсе для отображения пользовательского интерфейса входа в систему, а supertokens-node
библиотека будет использоваться на серверной части для предоставления маршрутов API авторизации.
2. Позвоните supertokens-auth-react
и supertokens-web-js
init
функция
Начните с создания AuthView
компонент внутри /src/views
папка. Этот компонент будет отображать компонент SuperTokens React для обработки аутентификации на внешнем интерфейсе:
<script lang="ts">
export default {
// See next sections
}
</script>
<template>
<main>
<div id="authId" />
</main>
</template>
Обратите внимание, что мы сделали <div>
элемент с id="authId"
. Здесь мы будем отображать компоненты реакции, предоставляемые SuperTokens.
Далее создадим файл — /src/components/Supertokens.tsx
который является фактическим компонентом React, который мы будем отображать. Внутри этого файла мы инициализируем supertokens-auth-react
SDK и используйте его в React render
функция.
import * as React from "react";
import * as SuperTokens from "supertokens-auth-react";
import * as ThirdPartyEmailPassword from "supertokens-auth-react/recipe/thirdpartyemailpassword";
import { Github, Google } from "supertokens-auth-react/recipe/thirdpartyemailpassword";
import Session from "supertokens-auth-react/recipe/session";
SuperTokens.init({
appInfo: {
appName: "SuperTokens Demo App",
apiDomain: "
websiteDomain: "
},
recipeList: [
ThirdPartyEmailPassword.init({
signInAndUpFeature: {
providers: [Github.init(), Google.init()],
}
}),
Session.init(),
],
});
class SuperTokensReactComponent extends React.Component {
override render() {
if (SuperTokens.canHandleRoute()) {
return SuperTokens.getRoutingComponent();
}
return "Route not found";
}
}
export default SuperTokensReactComponent;
Фрагмент выше использует
ThirdPartyEmailPassword
рецепт (социальные сети + электронная почта/пароль для входа). Вы также можете выбрать другой рецепт, следуя разделу быстрой настройки в руководствах на supertokens.com.
Далее мы загрузим это SuperTokensReactComponent
внутри AuthView
компонент.
<script lang="ts">
import * as React from "react";
import * as ReactDOM from "react-dom";
import SuperTokensReactComponent from "../components/Supertokens";
export default{
mounted(){
ReactDOM.render(React.createElement(SuperTokensReactComponent),
document.getElementById('authId'));
}
beforeDestroy(){
ReactDOM.unmountComponentAtNode(document.getElementById('authId') as Element);
}
}
</script>
Вышеупомянутое заботится о /auth/*
сопутствующие маршруты. Для всех остальных страниц нашего приложения мы хотим знать, существует ли сеанс, и извлекать из него информацию. Для этого мы будем использовать supertokens-web-js
SDK. Мы инициализируем этот SDK в корневом файле нашего приложения Vue. /src/main.ts
:
import Vue from "vue";
import VueCompositionAPI, { createApp, h } from "@vue/composition-api";
import * as SuperTokens from "supertokens-web-js";
import * as Session from "supertokens-web-js/recipe/session";
import App from "./App.vue";
import router from "./router";
SuperTokens.init({
appInfo: {
appName: "SuperTokens Demo",
apiDomain: "
},
recipeList: [Session.init()],
});
Vue.use(VueCompositionAPI);
const app = createApp({
router,
render: () => h(App),
});
app.mount("#app");
Конфиг для
Session.init
Звонок,apiDomain
иappName
как дляinit
функции (supertokens-auth-react
иsupertokens-web-js
) всегда должно быть одинаковым.
3. Настройте маршрутизацию, чтобы отобразить интерфейс входа в систему.
Vue CLI уже генерирует начальную маршрутизацию для нашего приложения внутри /src/router.index.ts
. Мы обновим этот файл, чтобы все /auth/*
маршруты загружают AuthView
компонент, который мы создали ранее:
import Vue from 'vue'
import VueRouter from 'vue-router'
import HomeView from '../views/HomeView.vue'
Vue.use(VueRouter)
const router = new VueRouter({
mode: 'history',
base: import.meta.env.BASE_URL,
routes: [{
path:'/auth*',
name:'auth',
component: () => import('../views/AuthView.vue'),
}]
})
export default router
Путь для AuthView
компонент /auth*
. *
указывает, что любые под/вложенные пути с /auth
поскольку родительский путь должен отображаться AuthView
компонент. AuthView
компонент, в свою очередь, отобразит компонент ReactJS, который мы создали ранее, который будет использовать supertokens-auth-react
SDK для отображения пользовательского интерфейса авторизации.
Мы лениво загружаем /auth
маршрут, потому что AuthView
компонент загружает ReactJS как зависимость. Ленивая загрузка гарантирует, что эти зависимости внедряются только в AuthView
компонент при посещении /auth/*
маршруты. Для всех остальных маршрутов эти зависимости не импортируются, что позволяет сохранить общий размер пакета приложения.
4. Просмотрите пользовательский интерфейс входа
Если вы сейчас посетите http://локальный:4200/аутентификациявы должны увидеть интерфейс входа в систему, как показано ниже:
Бэкэнд-интеграция
Вы можете увидеть раздел быстрой настройки бэкенда в нашей документации на supertokens.com или даже скопировать код из нашего примера. В качестве резюме:
Вам нужно инициализировать SDK supertokens-node и предоставить ему recipeList (аналогично тому, как вы это делали во внешнем интерфейсе).
Затем вам нужно настроить CORS, добавить промежуточное ПО SuperTokens и errorHandler в ваше приложение. Промежуточное ПО SuperTokens предоставляет интерфейсу все маршруты API, связанные с аутентификацией (такие как вход, регистрация, выход и т. д.).
Наконец, вам нужно указать connectionURI (местоположение) ядра SuperTokens. Чтобы быстро приступить к работе, вы можете предоставить его (это ядро, которое мы размещаем в демонстрационных целях).
После того, как вы успешно настроили свой сервер, вы можете попробовать зарегистрироваться на веб-интерфейсе.
Управление сеансом
Внутри /src/views/HomeView.vue
файл, мы проверим, аутентифицирован ли пользователь, и условно отобразим шаблон. Для аутентифицированных пользователей мы можем показать им кнопку выхода с информацией об их сеансе (например, их userId
). Для неаутентифицированных пользователей мы можем показать им кнопку для маршрута к /auth
страница.
<script lang="ts">
import * as Session from "supertokens-web-js/recipe/session";
export default {
data() {
return {
session: false,
userId: "",
};
},
mounted() {
this.getUserInfo();
},
methods: {
redirectToLogin() {
window.location.href = "/auth";
},
async getUserInfo() {
this.session = await Session.doesSessionExist();
if (this.session) {
this.userId = await Session.getUserId();
}
},
async onLogout() {
await Session.signOut();
window.location.reload();
},
},
};
</script>
<template>
<main>
<div class="body">
<h1>Hello</h1>
<div v-if="session">
<span>UserId:</span>
<h3>{{ userId }}</h3>
<button @click="onLogout">Sign Out</button>
</div>
<div v-else>
<p>
Visit the <a href=" tutorial</a> to learn how to build Auth
under a day.
</p>
<button @click="redirectToLogin">Sign in</button>
</div>
</div>
</main>
</template>
Чтобы загрузить HomeView
компонент включен / мы обновим /src/router/index.ts
файл:
const router = new VueRouter({
// ...
routes: [{
path: "/",
name: "home",
component: HomeView,
}, /*...*/],
});
Если вы сейчас посетите http://локальный: 4200вы должны увидеть следующую страницу:
Настройка ядра SuperTokens
Выполняя настройку бэкэнда, мы используем как
connectionURI
для ядра. Это демонстрационный экземпляр ядра, размещенный командой SuperTokens. Вы можете использовать это столько, сколько захотите, но когда вы решите использовать SuperTokens, вам следует переключиться на самостоятельно размещенный или управляемая версия ядра.
Заключение
Подводя итог, мы использовали SDK ReactJS, предоставленный SuperTokens, чтобы показать предварительно созданный пользовательский интерфейс входа для нашего приложения Vue. Мы также оптимизировали размер пакета, чтобы ReactJS SDK загружался только для маршрутов, связанных с аутентификацией. Полезные ссылки:
Написано людьми в Супертокены — надеюсь тебе понравилось! Мы всегда доступны на нашем сервере Discord. Присоединяйтесь к нам, если у вас есть какие-либо вопросы или вам нужна помощь.