Supabase v kombinaci s NextJS nebo Expo umožňuje vytvořit vedlejší projekt během několika hodin.
Supabase nedávno přidala výukový program pro Expo a podporu pro ověřování Apple OAuth. Apple OAuth však nefunguje hned po vybalení s Expo a Supabase. Tak jsem si řekl, že napíšu tento článek a vytvořím šablonu GitHub.
Supabase a Expo
Sledoval jsem rychlý start Supabase Expo, abych v Expo zprovoznil základní ověřování. Rychlý start nezmiňuje AsyncStorage, který je vyžadován v lib/supabase.js
aby to fungovalo.
Můj konečný kód:
import AsyncStorage from '@react-native-async-storage/async-storage';
import { createClient } from '@supabase/supabase-js';
// https://reactnative.dev/docs/security#storing-sensitive-info
import { supabaseUrl, supabaseAnonKey } from './supabase-keys';
export const supabase = createClient(supabaseUrl, supabaseAnonKey, {
localStorage: AsyncStorage,
detectSessionInUrl: false
});
Supabase Apple OAuth s Expo
Dále jsem postupoval podle návodu Supabase pro ověřování Apple. Pokusil jsem se použít metodu přihlášení Supabase onClick v mé komponentě React Native auth, která nefunguje:
const { user, session, error } = await supabase.auth.signIn({
provider: 'apple'
});
Všichni uživatelé/relace/chyby budou null
. Trochu jsem se obával, že Apple OAuth na mobilu nebude podporován knihovnou Go True od Supabase, ale narazil jsem na PR, který přidává podporu Oprava:Přidat tok grantů id_token
Místo použití Apple jako poskytovatele jsem se rozhodl použít ověřovací knihovnu Expo k získání tokenu a poté jej předat Supabase:
import { startAsync, makeRedirectUri } from 'expo-auth-session';
import { supabase } from '../lib/supabase';
import { supabaseUrl } from '../lib/supabase-keys';
const signInWithApple = async () => {
const returnUrl = makeRedirectUri({ useProxy: false });
const provider = 'apple';
const authUrl = `${supabaseUrl}/auth/v1/authorize?provider=${provider}&redirect_to=${returnUrl}`;
const response = await startAsync({ authUrl, returnUrl });
if (!response || !response.params?.refresh_token) {
return;
}
await supabase.auth.signIn({
refreshToken: response.params.refresh_token
});
};
Celý kód je k dispozici na GitHubu. Apple OAuth se Supabase a podporou React Native je relativně nový. Zpětná vazba je vždy vítána, pokud existuje lepší způsob, jak věci dělat.