百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

Supabase 和 Svelte 快速入门指南

connygpt 2024-09-08 13:28 6 浏览

此示例提供了使用 Supbase 和 Svelte 构建简单用户管理应用程序(从头开始!)的步骤。


此示例提供了使用 Supbase 和 Svelte 构建简单用户管理应用程序(从头开始!)的步骤。这包括:

  • Supabase 数据库:用于存储您的使用数据的 Postgres 数据库。
  • Supabase Auth:用户可以使用魔术链接登录(没有密码,只有电子邮件)。
  • Supabase 存储:用户可以上传照片。
  • 行级安全性:数据受到保护,个人只能访问自己的数据。
  • 即时 API:创建数据库表时会自动生成 API。

在本指南结束时,您将拥有一个允许用户登录并更新一些基本个人资料详细信息的应用程序:

GitHub

每当您遇到困难时,请查看此 repo。

项目设置

在我们开始构建之前,我们将设置我们的数据库和 API。这就像在 Supabase 中启动一个新项目然后在数据库中创建一个“模式”一样简单。

创建项目

转到app.supabase.com。

  1. 点击“新建项目”。
  2. 输入您的项目详细信息。
  3. 等待新数据库启动。

设置数据库模式

现在我们要设置数据库模式。我们可以使用 SQL 编辑器中的“用户管理入门”快速入门,或者您可以从下面复制/粘贴 SQL 并自己运行它。

SQL

-- Create a table for public "profiles"
create table profiles (
  id uuid references auth.users not null,
  updated_at timestamp with time zone,
  username text unique,
  avatar_url text,
  website text,

  primary key (id),
  unique(username),
  constraint username_length check (char_length(username) >= 3)
);

alter table profiles enable row level security;

create policy "Public profiles are viewable by everyone."
  on profiles for select
  using ( true );

create policy "Users can insert their own profile."
  on profiles for insert
  with check ( auth.uid() = id );

create policy "Users can update own profile."
  on profiles for update
  using ( auth.uid() = id );

-- Set up Realtime!
begin;
  drop publication if exists supabase_realtime;
  create publication supabase_realtime;
commit;
alter publication supabase_realtime add table profiles;

-- Set up Storage!
insert into storage.buckets (id, name)
values ('avatars', 'avatars');

create policy "Avatar images are publicly accessible."
  on storage.objects for select
  using ( bucket_id = 'avatars' );

create policy "Anyone can upload an avatar."
  on storage.objects for insert
  with check ( bucket_id = 'avatars' );

用户界面

  1. 转到“SQL”部分。
  2. 单击“用户管理启动器”。
  3. 单击“运行”。

获取 API 密钥

现在您已经创建了一些数据库表,您可以使用自动生成的 API 插入数据。我们只需anon要从 API 设置中获取 URL 和密钥。

  1. 转到“SQL”部分。
  2. 单击“用户管理启动器”。
  3. 单击“运行”。

构建应用程序

让我们从头开始构建 Svelte 应用程序。

初始化一个 Svelte 应用程序

我们可以使用Quickstart Svelte 模板来初始化一个名为supabase-svelte

npx degit sveltejs/template supabase-svelte
cd supabase-svelte

然后让我们安装唯一的附加依赖项:supbase-js

npm

npm install @supabase/supabase-js


yarn add @supabase/supabase-js

最后,我们要将环境变量保存在.env. 我们需要的只是 API URL 和您之前anon复制的密钥。

env

SVELTE_APP_SUPABASE_URL=YOUR_SUPABASE_URL
SVELTE_APP_SUPABASE_ANON_KEY=YOUR_SUPABASE_ANON_KEY

我们的应用程序几乎可以正常运行,要使 svelte 能够处理 supbase 和 .env 文件,我们首先需要rollup.config.js稍微更改文件。Supbase 导入json文件,将 .json 文件转换为 ES6 模块,我们需要@rollup/plugin-json通过运行安装它:

npm

npm install --save-dev @rollup/plugin-json
yarn add --save-dev dotenv @rollup/plugin-replace

并将这些插件添加到rollup.config.js文件中。

JavaScript

 rollup.config.js

import { config } from 'dotenv';
  import replace from '@rollup/plugin-replace';
  import json from '@rollup/plugin-json'

  export default {
    plugins: [
    replace({
            __api: JSON.stringify({
                env: {
                    isProd: production,
                    ...config().parsed // attached the .env config
                }
            }),
            delimiters: ['', '']
        }),
        json(),
    // ...
    ],
    // ...
  }

现在我们已经有了 API 凭据,让我们创建一个帮助文件来初始化 Supbase 客户端。这些变量将在浏览器上公开,这完全没问题,因为我们在数据库上启用了行级安全性。

JavaScript

src/supabaseClient.js

import { createClient } from '@supabase/supabase-js'

const supabaseUrl = __api.env.SVELTE_APP_SUPABASE_URL
const supabaseAnonKey = __api.env.SVELTE_APP_SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey)

一个可选步骤是更新 CSS 文件public/global.css以使应用程序看起来不错。您可以在此处找到该文件的完整内容。

设置登录组件

让我们设置一个 Svelte 组件来管理登录和注册。我们将使用 Magic Links,因此用户无需使用密码即可使用电子邮件登录。

HTML

/src/Auth.svelte

<form class="row flex flex-center" on:submit|preventDefault={handleLogin}>
  <div class="col-6 form-widget">
    <h1 class="header">Supabase + Svelte</h1>
    <p class="description">Sign in via magic link with your email below</p>
    <div>
      <input
        class="inputField"
        type="email"
        placeholder="Your email"
        bind:value={email}
      />
    </div>
    <div>
      <input type="submit" class='button block' value={loading ? "Loading" : "Send magic link"} disabled={loading} />
    </div>
  </div>
</form>

用户存储

为了访问其他地方的用户信息,我们使用可写存储。创建一个名为的新文件sessionStore.js

JavaScript

src/sessionStore.js

import { writable } from 'svelte/store';

export const user = writable(false);

账户页面

用户登录后,我们可以允许他们编辑他们的个人资料详细信息并管理他们的帐户。让我们为它创建一个名为Profile.svelte.

HTML

src/Profile.svelte

<form use:getProfile class="form-widget" on:submit|preventDefault={updateProfile}>
  <div>
    <label for="email">Email</label>
    <input id="email" type="text" value={$user.email} disabled />
  </div>
  <div>
    <label for="username">Name</label>
    <input
      id="username"
      type="text"
      bind:value={username}
    />
  </div>
  <div>
    <label for="website">Website</label>
    <input
      id="website"
      type="website"
      bind:value={website}
    />
  </div>

  <div>
    <input type="submit" class="button block primary" value={loading ? 'Loading ...' : 'Update'} disabled={loading}/>
  </div>

  <div>
    <button class="button block" on:click={signOut} disabled={loading}>
      Sign Out
    </button>
  </div>
</form>

启动!

现在我们已经准备好所有组件,让我们更新App.svelte

HTML

src/App.svelte

<div class="container" style="padding: 50px 0 100px 0;">
    {#if $user}
        <Profile />
    {:else}
        <Auth />
    {/if}
</div>

完成后,在终端窗口中运行它:

npm

npm run dev


yarn dev

然后打开浏览器到localhost:5000,你应该会看到完整的应用程序。

?? 警告:Svelte 默认使用port 5000,Supabase 使用port 3000. 要更改 supabase 的重定向端口,请转到:Authentication > Settings并更改Site Urllocalhost:5000

奖励:个人资料照片

每个 Supabase 项目都配置了存储,用于管理照片和视频等大文件。

创建上传小部件

让我们为用户创建一个头像,以便他们可以上传个人资料照片。我们可以从创建一个新组件开始:

HTML

src/Avatar.svelte

<div>
  {#if path}
    <img use:downloadImage
      {src}
      alt="Avatar"
      class="avatar image"
      style="height: {size}; width: {size};"
    />
  {:else}
    <div class="avatar no-image" style="height: {size}; width: {size};" />
  {/if}
  
  <div style="width: {size};">
    <label class="button primary block" for="single">
      {uploading ? 'Uploading ...' : 'Upload'}
    </label>
    <input
      style="visibility: hidden; position:absolute;"
      type="file"
      id="single"
      accept="image/*"
      bind:files
      on:change={uploadAvatar}
      disabled={uploading}
    />
  </div>
</div>

添加新小部件

然后我们可以将小部件添加到 Account 页面:

HTML

src/Profile.svelte

<form use:getProfile class="form-widget" on:submit|preventDefault={updateProfile}>
  <!-- Add to body -->
  <Avatar bind:path={avatar_url} on:upload={updateProfile} />

  <!-- Other form elements -->
</form>

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&amp;Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick &#39;n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...