Supabase 前端日志访问解决方案

06-01 1189阅读

Supabase日志系统接入方案

背景

根据 Supabase 官方讨论 和 Supabase Management API 文档 、Supabase 日志文档,我们需要设计一个安全、高效的方案来访问 Supabase 日志,并在前端展示。

方案设计

1. 架构概述

我们采用 Edge Function 作为中间层,使用 Management API Access Token 访问 Management API,然后将日志安全地返回给前端。

前端应用 (Vue 3) -> Edge Function -> Supabase Management API

2. Edge Function 实现

在 supabase/functions/system-logs/index.ts 中实现:

// 定义日志类型枚举和对应的表名
export enum LogTable {
   
  Auth = 'auth_logs',
  Edge = 'edge_logs',
  FunctionEdge = 'function_edge_logs',
  Function = 'function_logs',
  PgBouncer = 'pgbouncer_logs',
  Postgres = 'postgres_logs',
  Postgrest = 'postgrest_logs',
  Realtime = 'realtime_logs',
  Storage = 'storage_logs',
  Supervisor = 'supervisor_logs'
}
// 定义请求参数接口
interface LogsQueryParams {
   
  type?: string;
  iso_timestamp_start?: string;
  iso_timestamp_end?: string;
}
// Supabase项目信息和访问令牌
const SUPABASE_PROJECT_ID = "your_project_id"
const SUPABASE_ACCESS_TOKEN = "your_access_token"
// 处理请求的主函数
serve(async (req) => {
   
  // 处理跨域请求
  if (req.method === 'OPTIONS') {
   
    return new Response('ok', {
    headers: corsHeaders });
  }
  try {
   
    // 从请求中获取参数 (支持JSON和URL查询字符串)
    let params: LogsQueryParams = {
   };
    
    if (req.method === 'POST') {
   
      // 尝试从请求体解析JSON
      params = await req.json().catch(() => ({
   }));
    }
    
    // 如果没有从请求体获取到参数,尝试从URL查询字符串获取
    if (Object.keys(params).length === 0) {
   
      const url = new URL(req.url);
      params = {
   
        type: url.searchParams.get('type') || undefined,
        iso_timestamp_start: url.searchParams.get('iso_timestamp_start') || undefined,
        iso_timestamp_end: url.searchParams.get('iso_timestamp_end') || undefined
      };
    }
    
    // 参数提取
    const {
    type, iso_timestamp_start, iso_timestamp_end } = params;
    
    // 时区处理:支持直接输入北京时间,自动转换为UTC时间
    const convertToUTC = (beijingTimeIso: string | undefined): string | undefined => {
   
      if (!beijingTimeIso) return undefined;
      try {
   
        const date = new Date(beijingTimeIso);
        date.setHours(date.getHours() - 8); // 减去8小时调整为UTC
        return date.toISOString();
      } catch (e) {
   
        return undefined;
      }
    };
    
    // 时间参数处理
    let startTime = convertToUTC(iso_timestamp_start) || ''
Supabase 前端日志访问解决方案
(图片来源网络,侵删)
Supabase 前端日志访问解决方案
(图片来源网络,侵删)
Supabase 前端日志访问解决方案
(图片来源网络,侵删)
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

相关阅读

目录[+]

取消
微信二维码
微信二维码
支付宝二维码