supabase + react native:访问令牌在一周不活动后未刷新

inkz8wg9  于 2023-08-07  发布在  React
关注(0)|答案(1)|浏览(125)

我在expo react native应用程序中使用@supabase/supabase-js(v2.23.0)sdk。
初始化react native客户端

createClient(
  '<supabaseUrl>',
  '<anonKey>',
  {
    auth: {
        storage: AsyncStorage as any,
        autoRefreshToken: true,
        persistSession: true,
        detectSessionInUrl: false,
    }
  }

字符串
jwt访问令牌的过期时间在supabase Jmeter 板中设置为3600 s(1小时)。
当用户使用应用程序时,我可以在日志中看到令牌不断刷新,并且只要用户经常使用它,用户就可以继续使用应用程序而不会出现任何问题。所以autoRefreshToken似乎工作得很好。
当用户超过一周不使用应用程序时,就会出现问题。然后令牌刷新似乎不再工作。
我有一个通用方法作为 Package 器,围绕着像这样的与supabase客户机进行调用

const selectMethod = modifier
    ? modifier(supabase.from(key).select(select))
    : supabase.from(key).select(select);
  const { data, error } = await selectMethod;
  if (error) {
    if (error.message === 'JWT expired') {
      supabase.auth.signOut();
    }
    throw error;
  }


这样,用户将被重定向到登录页面。我可以验证,在一周的不活动之后,我将开始收到“JWT过期”的回复。我添加了这个,因为否则用户将无法在不知道发生了什么的情况下查询任何数据。
我的第一个假设是刷新令牌在一周后过期,但根据本文的讨论,刷新令牌不会过期。
我发现了another discussion,其中有几个人特别报告了react native的问题。所以我想知道在supabase客户端上使用AsyncStorage是否有问题。
有人知道为什么刷新令牌会在一周不活动后停止工作吗?

8oomwypt

8oomwypt1#

你可以尝试使用expo-secure-store,如文档所述:https://supabase.com/docs/guides/getting-started/tutorials/with-expo#initialize-a-react-native-app

import 'react-native-url-polyfill/auto'
import * as SecureStore from 'expo-secure-store'
import { createClient } from '@supabase/supabase-js'

const ExpoSecureStoreAdapter = {
  getItem: (key: string) => {
    return SecureStore.getItemAsync(key)
  },
  setItem: (key: string, value: string) => {
    SecureStore.setItemAsync(key, value)
  },
  removeItem: (key: string) => {
    SecureStore.deleteItemAsync(key)
  },
}

const supabaseUrl = YOUR_REACT_NATIVE_SUPABASE_URL
const supabaseAnonKey = YOUR_REACT_NATIVE_SUPABASE_ANON_KEY

export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
  auth: {
    storage: ExpoSecureStoreAdapter as any,
    autoRefreshToken: true,
    persistSession: true,
    detectSessionInUrl: false,
  },
})

字符串

相关问题