使用 Nuxt v3 设置 Supabase Auth

实现身份验证是您在大多数项目中都会做的事情,但由于您实际执行此操作的频率,您可能仍然不记得如何执行此操作。

以下是有关使用 nuxt v3 实施 supabase auth 的快速方法。在此示例中,我们将使用 otp,但它适用于所有情况。

您首先要访问 supabase 的网站来开始您的项目。

在 supabase 中创建项目并在 nuxt 上启动项目后,我们希望通过执行以下操作来安装 supabase nuxt 包:

npx nuxi@最新模块添加supabase

然后我们将创建 .env 文件并添加以下环境变量:

supabase_url=supabase_key=

您可以在项目的 supabase 仪表板上的“设置 -> api”下找到这些

使用 Nuxt v3 设置 Supabase Auth

之后,我们就可以设置我们的项目了。到目前为止我已经制作了 2 个非常基本的文件:

auth.ts(我使用了 pinia 商店,但随意使用常规文件)

import { definestore } from "pinia";export const useauthstore = definestore("auth", () => {  const supabase = usesupabaseclient();  const sendotp = async (email: string) => {    const { error } = await supabase.auth.signinwithotp({      email,    });    if (error) {      throw error;    }    return true;  };  const verifyotp = async (email: string, otp: string) => {    const { error } = await supabase.auth.verifyotp({      type: "email",      token: otp,      email,    });    if (error) {      throw error;    }    return true;  };  return {    sendotp,    verifyotp,  };});

loginform.vue

  

welcome

enter the 6-digit code sent to {{ email }}

import { ref, computed } from "vue";import { useauthstore } from "~/stores/auth";const authstore = useauthstore();const email = ref("");const otpcode = ref("");const mode = ref("email");const buttonlabel = computed(() => { return mode.value === "email" ? "send one-time password" : "verify code";});const handlesubmit = async () => { if (mode.value === "email") { try { await authstore.sendotp(email.value); mode.value = "code"; } catch (error) { console.log("error sending otp: ", error); } } else { try { await authstore.verifyotp(email.value, otpcode.value); } catch (error) { console.log("error verifying otp: ", error); } }};

请注意,我也使用 nuxtui,以防出现任何错误。

因为默认情况下,signinwithotp 函数会发送一个魔术链接,因此您必须更改 supabase 仪表板上的电子邮件模板才能发送令牌:

使用 Nuxt v3 设置 Supabase Auth
这可以在身份验证 -> 电子邮件模板 -> 更改确认注册和 magic link 模板下找到以使用 {{ .token }}

差不多就这些了,您已经拥有工作授权了!
如果你想添加注销,你还可以在之前的文件中添加一个方法,如下所示:

const signout = async () => {  const { error } = await supabase.auth.signout();  if (error) {    throw error;  }  return true;};

但是,如果您想保护某些路由,我们也可以添加中间件。

在根目录上创建一个名为 middleware 的文件夹(名称是 key)和一个名为 auth.ts 的文件。

然后您可以添加如下内容:

export default definenuxtroutemiddleware((to) => {  const user = usesupabaseuser();  const protectedroutes = ["/app"];  if (!user.value && protectedroutes.includes(to.path)) {    return navigateto("/auth");  }  if (user.value && to.path === "/auth") {    return navigateto("/");  }});

这基本上可以保护您的 /app 路由免受服务器的影响,因此,如果您尝试在未登录的情况下访问 /app,您将被重定向到 /auth。

同样,如果您在已登录的情况下尝试访问 /auth,您将被重定向到主页 /。

现在,要使用它,您可以将其放置在任何组件的 标签内,如下所示:

definePageMeta({  middleware: "auth", // this is the name of the file, minus the extension});

就是这样,就这么简单!

以上就是使用 Nuxt v3 设置 Supabase Auth的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1493343.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月19日 15:36:40
下一篇 2025年12月19日 15:36:55

相关推荐

  • HMPL – HTMX 的最佳替代品

    大家好!在本文中,我们将考虑像 hmpl 这样的 javascript 模块以及它如何在项目中替换 htmx。还要考虑它们的差异、优点和缺点。 当进一步比较这两个模块时,值得考虑的是,一个是模板语言,而另一个是一组用于处理 html 的工具,通过属性等实现。 让我们从两个模块的一般概念开始。 通过将…

    2025年12月19日 好文分享
    000
  • JavaScript 中 Go 风格的错误处理

    几乎每个每天使用 javascript 的人都知道 try-catch 处理起来很痛苦,尤其是当你有多个错误需要处理时。 大多数提出的解决方案都试图复制 golang 的方法 – 将所有内容作为返回值处理。除其他外,它是 go 的一个很棒的功能,但 js 是完全不同的语言(废话),我认为…

    2025年12月19日
    000
  • JsTraceToIX – 调试 React、Vue 和 Nodejs 变得更容易! – 无需用“consolelog”弄乱您的代码库!

    如果您曾经需要在 node 或 web 浏览器上调试 react 或 vue 组件、箭头函数或复杂表达式,您就会知道添加多个 console.log 语句和进行不必要的代码更改的痛苦。这就是 jstracetoix 发挥作用的地方! 项目链接 主要特点: 通过最少的代码更改来简化调试。支持 reac…

    2025年12月19日
    000
  • 请查看我的项目

    我使用Nextjs和tailwind独立完成了Frontend Mentor的Devjobs项目。有人可以查看项目和/或代码并给我任何反馈吗?我是一个学习者。 部署:https://nextjs-devjobs.vercel.app/ Github:https://github.com/JaiBh/…

    2025年12月19日
    000
  • 破解编码面试:快慢指针技术部分

    在深入研究下一个技术之前,如果您正在准备编码面试并想要全面的资源,请务必探索破解编码面试的十大必备书籍(从初级到高级排名)。对于任何决心在顶级科技公司找到工作的人来说,这都是一本必备的书。 快指针和慢指针技术概述 快慢指针技术(也称为弗洛伊德龟兔赛跑)是一种优雅而有效的模式,用于解决涉及链表和数组等…

    2025年12月19日
    000
  • JUnit 测试:综合指南

    junit 是 java 生态系统中广泛使用的测试框架,旨在帮助开发人员编写和运行可重复的测试。它在确保代码按预期运行方面发挥着至关重要的作用,使其成为维护软件质量的重要工具。凭借其广泛的功能和易用性,junit 已成为 java 单元测试事实上的标准。自 1997 年 kent beck 和 er…

    2025年12月19日
    000
  • 部署我的 nextjs 作品集网站是多么容易

    在过去的几天里,我很高兴推出我的个人作品集网站,以分享我的知识并建立强大的在线形象。经过研究,我发现 Namecheap 提供的域名价格非常实惠——第一年仅需 2.99 美元,还有折扣——所以我很快就获得了它。接下来,我讨论了是投资托管还是利用 Vercel 的免费层进行部署。最终,我选择在 Ver…

    2025年12月19日
    000
  • Shadcn CLI如何使用错误常量来提高代码可读性

    在本文中,我们分析了如何在 shadcn/ui 代码库中使用名为 error.ts 的文件。 utils/errors.ts error.ts 包含 12 个变量: export const missing_dir_or_empty_project = “1”export const existin…

    2025年12月19日
    000
  • 使用 Rollup 创建具有 CommonJS 和 ESM 支持的 NPM 包

    使用 rollup 创建具有 commonjs (cjs) 和 ecmascript 模块 (esm) 支持的 npm 包 在这篇文章中,我们将探索如何使用 rollup 创建支持 commonjs (cjs) 和 ecmascript 模块 (esm) 的 npm 包。 rollup 是一个 ja…

    2025年12月19日
    000
  • 【个人网站】如何使用Notion作为数据库进行全栈开发

    网址:https://www.jessieontheroad.com/zh/GitHub:https://github.com/Jessie-jzn 使用 notion 作为数据库进行全栈开发是一种强大的方法,它将 notion 的易用性与其丰富的 api 用于管理和显示数据相结合,使其成为开发高效…

    2025年12月19日
    000
  • TEMPLINK 单一、安全的链接可在几秒钟内访问多个文件

    TEMPLINK 实际上是做什么的? Templink 允许您创建一个安全的链接,只需几秒钟即可访问多个文件。通过设置过期日期和密码保护的选项,您可以完全控制您的文件共享体验。 在这里尝试 – https://templink-nu.vercel.app/Github 存储库 &#821…

    2025年12月19日
    000
  • 摆脱 JSON:Web 开发中数据传输的新方法

    如果您一直在 web 开发行业进行编码,那么您很可能非常熟悉 json。这是包罗万象的事实上的标准,从未受到挑战。它无处不在,你已经习惯了。您的所有 rest 调用都通过 json 传输数据。您知道该格式的局限性,并且接受它们。 还是必须这么做? (注意:所有包和代码的链接都在文章的链接部分) 简史…

    2025年12月19日
    000
  • 使用 Github 页面部署 React Nextjs 应用程序的步骤

    由于 github pages 的静态特性和 next.js 的动态功能,将 next.js 应用程序部署到 github pages 可能有点棘手。在本文中,我将引导您完成成功部署的步骤。 先决条件 github 帐户您的计算机上安装了 node.js 和 npm准备部署的 next.js 项目 …

    2025年12月19日
    000
  • 创建您自己的 npm 库

    介绍 react.js、three.js 等我们平时使用的优​​秀库其实都可以自己创建。我发布这篇文章是对加拿大一所大学创建图书馆课程的回顾。 先决条件 node.js 必须可用。安装 node.js 即可使用 npm。 将您自己的库发布到 npm 项目设置 首先,创建一个 npm 帐户。 npmj…

    2025年12月19日 好文分享
    000
  • VShell 工具的 Git Rebase 和代码重构

    本周,我有机会深入研究如何使用 git rebase,同时重构我的 vshell 工具的代码库。我的主要任务是改进代码的结构和可维护性,同时遵守 dry(不要重复自己)原则,这对于使代码更具可读性、可维护性和更易于调试至关重要。此外,我遵循了重构目录中概述的各种重构模式,例如提取函数、提取类和重命名…

    2025年12月19日
    000
  • Creating a Nextjs API to Convert HTML to PDF with Puppeteer (Vercel-Compatible)

    将 html 转换为 pdf 是 web 应用程序中的常见要求。在这篇博文中,我们将探索如何创建一个 next.js api 路由,使用 puppeteer 将 html 转换为 pdf,并确保它在部署到 vercel 时正常工作。 挑战 虽然 puppeteer 是一款功能强大的 html 到 p…

    2025年12月19日
    000
  • 如何安装和使用 NVM 管理多个 Nodejs 版本

    介绍 高科技爱好者,大家好! 欢迎阅读有关使用适用于 windows 的节点版本管理器 (nvm) 的分步指南!如果您曾经面临过跨不同项目管理多个 node.js 版本的挑战,那么 nvm 就是您需要的工具。它简化了流程,让您可以轻松地在 node.js 版本之间切换并保持开发环境井井有条。 读完本…

    2025年12月19日
    000
  • Hacktoberfest week 1

    黑客活动的第一周是上周。我的第一次黑客啤酒节,我不会撒谎。我主要是紧张。虽然为开源项目做出贡献的概念令人兴奋,但在 4 周内做出 4 个开源贡献且难度不断增加有点令人生畏。 第一组是找到第一个问题(简单)。我不想粉饰它,与我的第一个公关相比,这是最难的部分。经过大量浏览才发现问题。由于大多数问题并不…

    2025年12月19日
    000
  • 如何开始 Web 开发

    介绍 Web 开发是当今最受欢迎的职业之一,对于那些对 前端(用户所看到的内容)和 后端(服务器逻辑)感兴趣的人来说)。如果您刚刚起步,想知道从哪里开始或者作为开发者可以赚多少钱,本指南将为您提供清晰的路径和入门资源。 什么是网页开发? 网络开发分为两大区域: 前端:网站的视觉和交互部分。包括: H…

    2025年12月19日
    000
  • 了解如何建立实时聊天

    在本教程中,我们将指导您使用 superviz 构建实时聊天应用程序。实时聊天是现代 web 应用程序的一项重要功能,它使用户能够即时相互通信。无论您是在构建协作平台、客户支持工具还是社交网站,添加实时聊天都可以增强用户交互和参与度。 我们将演示如何设置一个简单的聊天界面,参与者可以在其中实时发送和…

    2025年12月19日
    000

发表回复

登录后才能评论
关注微信