网站首页 > 技术文章 正文
构建自己的身份验证服务可能很乏味、复杂且耗时。为了节省时间,开发人员经常求助于使用第三方身份验证服务进行身份验证。这篇文章将指导您如何使用 SuperTokens 向 VueJS 应用程序添加身份验证。IP:Bhagya:Plag 检查清楚。
SuperTokens是一个开源项目,可让您快速将身份验证添加到您的应用程序。它为您提供了预构建的身份验证 UI 和后端 API,以提供端到端的集成体验。
在深入研究代码之前,让我们讨论一下整体架构。
Architecture
SuperTokens 由三个组件构成:
- 前端 SDK
- 后端 SDK
- 与数据库对话的核心微服务。
预构建的 UI 是 ReactJS 组件(由supertokens-auth-react库提供)。为了使用它们,我们必须在 VueJS 应用程序中渲染 React 组件。
supertokens-node对于后端,我们将使用 SuperTokens ( library )提供的 NodeJS SDK 。此 SDK 通过中间件公开所有身份验证 API(如/auth/signin等/auth/signout),供前端调用。当调用这些 API 时,SDK 将与 SuperTokens Core 微服务对话,以读取和写入数据库信息。
SuperTokens 核心服务可以是自托管的(并连接到您自己的数据库),也可以由 SuperTokens 背后的团队托管(在 supertokens.com 上注册)。
为了使应用程序的包大小保持较小,我们将supertokens-auth-reactSDK 的使用限制为所有与身份验证相关的路由(/auth/*默认情况下),并为我们应用程序中的所有其他路由使用更轻量的 vanilla JS SDK(supertokens-web-js库)。最后,我们将使用代码拆分和延迟导入来确保supertokens-auth-reactSDK 仅在访问/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库将在前端用于呈现登录 UI,该supertokens-node库将在后端用于公开身份验证 API 路由。
2.调用Supertokens-auth-React和Supertokens-web-Js初始化函数
首先在文件夹AuthView内创建组件。/src/views该组件将渲染 SuperTokens React 组件以在前端处理身份验证:
Vue.js 组件
<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-reactSDK 并在 Reactrender函数中使用它。
java
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: "http://localhost:3001",
websiteDomain: "http://localhost:4200",
},
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组件中加载它:
Vue.js 组件
<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-jsSDK。我们在 Vue 应用程序的根文件中初始化这个 SDK /src/main.ts:
Vue.js 组件
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: "http://localhost:3001",
},
recipeList: [Session.init()],
});
Vue.use(VueCompositionAPI);
const app = createApp({
router,
render: () => h(App),
});
app.mount("#app");
Session.init调用的配置,函数 (和)的theapiDomain和 the应该始终相同。 appNameinitsupertokens-auth-reactsupertokens-web-js
3. 设置路由以显示登录 UI
Vue CLI 已经为我们的应用生成了初始路由/src/router.index.ts。我们将更新此文件,以便所有/auth/*路由都加载AuthView我们之前创建的组件:
Vue.js 组件
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-reactSDK 显示身份验证 UI。
我们延迟加载/auth路由,因为AuthView组件将 ReactJS 作为依赖项加载。延迟加载确保这些依赖项仅在AuthView您访问/auth/*路由时注入到组件中。对于所有其他路由,不会导入这些依赖项,从而保持应用程序的整体包大小。
4.查看登录界面
如果您现在访问http://localhost:4200/auth,您应该会看到如下所示的登录 UI:
后端集成
您可以在 supertokens.com 上的文档中查看后端快速设置部分,甚至可以从我们的示例应用程序中复制代码。总结:
- 您需要初始化supertokens-nodeSDK 并提供它recipeList(类似于您在前端所做的)。
- 然后您需要设置CORS、添加 SuperTokensmiddleware和errorHandler到您的应用程序。SuperTokens 向前端middleware公开所有与身份验证相关的 API 路由(如登录、注册、注销等)。
- 最后,您需要提供connectionURISuperTokens 核心的(位置)。为了快速开始,您可以提供它https://try.supertokens.com(这是我们为演示目的而托管的核心)。
成功设置服务器后,您现在可以尝试在前台注册。
会话管理
在/src/views/HomeView.vue文件中,我们将检查用户是否经过身份验证并有条件地呈现模板。对于经过身份验证的用户,我们可以向他们显示一个注销按钮,其中包含有关其会话的信息(例如他们的userId)。对于未经身份验证的用户,我们可以向他们显示一个按钮以路由到该/auth页面。
Vue.js 组件
<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="https://supertokens.com">SuperTokens 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,
}, /*...*/],
});
If you now visit http://localhost:4200, you should see the following page:
SuperTokens 核心设置
在进行后端设置时,我们将https://try.supertokens.com其connectionURI用作核心。这是一个由 SuperTokens 团队托管的演示核心实例。您可以随意使用它,但是当您致力于使用 SuperTokens 时,您应该切换到核心的自托管或托管版本。
结论
总而言之,我们使用 SuperTokens 提供的 ReactJS SDK 来展示我们的 Vue 应用程序的预构建登录 UI。我们还优化了包大小,以便仅为与身份验证相关的路由加载 ReactJS SDK。有用的链接:
- 示例 Vue 应用程序
- 配方/身份验证方法列表
猜你喜欢
- 2024-09-10 一个基于vite构建的vue3+pinia+ts+element初始化开箱即用的项目
- 2024-09-10 GitHub一篇《Vue 加载远程组件解决方案》,引起业内大佬点评
- 2024-09-10 页面刷新时vuex数据持久化问题的解决方案:第三方插件完美实现
- 2024-09-10 基于vite + Vue3 + element-plus的前后端分离基础项目搭建
- 2024-09-10 Vue导入模块import xxx from '@/xxx'中的@是什么含义?
- 2024-09-10 终于搞懂了!原来 Vue 3 的 generate 是这样生成 render 函数的
- 2024-09-10 Vue3 + TS 中使用 Provide/Inject 需要考虑的三大问题
- 2024-09-10 关于Vue3的setup attribute标识是否是一个值得使用的语法糖?
- 2024-09-10 聊一聊如何在Vue中使用事件总线( Event Bus)进行组件间通信
- 2024-09-10 vite+vue3实现网页版编辑器,带高亮以及代码提
- 02-21走进git时代, 你该怎么玩?_gits
- 02-21GitHub是什么?它可不仅仅是云中的Git版本控制器
- 02-21Git常用操作总结_git基本用法
- 02-21为什么互联网巨头使用Git而放弃SVN?(含核心命令与原理)
- 02-21Git 高级用法,喜欢就拿去用_git基本用法
- 02-21Git常用命令和Git团队使用规范指南
- 02-21总结几个常用的Git命令的使用方法
- 02-21Git工作原理和常用指令_git原理详解
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)