使用 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的详细内容,更多请关注【创想鸟】其它相关文章!

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

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2664283.html

(0)
上一篇 2025年3月7日 11:36:33
下一篇 2025年3月7日 11:36:45

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • HMPL – HTMX 的最佳替代品

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

    2025年3月7日
    200
  • 列表协调问题

    什么是调和(调和)? 在Web前端开发中,这是区分依赖列表的源和目标版本(创建可渲染元素列表)的过程告诉项目发生了什么:添加、删除或移动。 问题 前两个不是问题,但问题是判断一个项目是否移动了 如果跟踪项目的值为 [2, 1, 3] 列表中…

    2025年3月7日
    200
  • Vuejs 初学者 VueJs 部分理解生命周期钩子

    生命周期钩子是 vue.js 的一项重要功能,它允许您在组件生命周期的特定阶段运行代码。在这篇文章中,我们将探讨什么是生命周期钩子以及如何在 vue 应用程序中有效地使用它们。 – 什么是生命周期钩子?生命周期挂钩是在组件生命周…

    2025年3月7日
    200
  • 如何使用 HTML 渲染器自动创建 PDF 文档

    自动化文档创建是许多 saas 产品的一项重要功能,无论是生成发票、报告还是证书。使用 html 渲染器,开发人员只需几行代码即可将动态 html 内容转换为高质量的 pdf 文档或 png 图像。在本指南中,我们将向您展示如何将 exoa…

    2025年3月7日
    200
  • Vuejs 条件渲染和 V-if 与 V-show

    如果你喜欢我的文章,可以请我一杯咖啡:)给我买咖啡 vue.js 条件渲染 v-if 和 v-show 指令用于有条件地渲染 vue.js 中的块。 v-如果 在vue.js中,指令v-if用于有条件地渲染块。仅当指令的表达式返回真值时才会…

    2025年3月7日
    200
  • 使用 React 构建租赁物业管理平台

    movin’ in 是一个面向代理的租赁物业管理平台,具有用于管理物业、客户和预订的后端、用于租赁物业的前端和移动应用程序。 通过以下解决方案,您可以通过将其托管在具有至少 1GB RAM 的 Docker Droplet 上,…

    2025年3月7日
    200
  • 如何自定义PDFjs

    pdf.js 是一个很棒的开源项目,它经常更新并且不断添加新功能,但是从外观上看它很丑陋,或者可以说它看起来已经过时了。从 pdf.js 获取最新的 pdf 功能和修复,同时在演示文稿方面拥有流畅的外观怎么样? pdfjskit 的 pdf…

    2025年3月7日
    200
  • 我从使用 Vuejs 构建计算器中学到了什么

    对于我的第四个项目,我使用 vue.js 开发了一个 计算器 应用程序。对于理解如何处理用户输入、显示动态结果以及使用 javascript 执行计算来说,这是一次宝贵的经验。以下是我在构建此应用程序时学到的主要经验教训的细分。 1. 处理…

    2025年3月7日
    200
  • Nodejs v 发布:终止对 Windows 位的支持

    2024 年 10 月 16 日,随着 node.js v23.0.0 的发布,node.js 社区达到了一个重要的里程碑。这个最新版本引入了多项改进和新功能,但也带来了一个重要的变化:node.js 将不再支持 32 位 windows。…

    2025年3月7日
    200
  • GitHub Actions 和 CI/CD 管道

    当然!以下是与 github actions 和 ci/cd 管道相关的关键概念和实践的全面摘要,以及我们讨论的示例: github actions 和 ci/cd 管道的关键概念 持续集成(ci): ci 涉及自动构建和测试代码更改,以确…

    2025年3月7日
    200

发表回复

登录后才能评论