From 9cb341ed117d7f8a286bc6bae04ae5e51b5ad438 Mon Sep 17 00:00:00 2001 From: Arthur Belleville Date: Mon, 5 May 2025 09:11:10 +0200 Subject: [PATCH] Work on supabase auth --- xtablo-expo/.env | 4 +- xtablo-expo/app/(auth)/_layout.tsx | 15 + xtablo-expo/app/(auth)/login.tsx | 143 ++++ xtablo-expo/app/(home)/(tabs)/profile.tsx | 6 +- xtablo-expo/app/(home)/_layout.tsx | 8 +- xtablo-expo/app/+not-found.tsx | 14 +- xtablo-expo/app/_layout.tsx | 1 + xtablo-expo/lib/supabase.ts | 19 + xtablo-expo/metro.config.js | 9 + xtablo-expo/package-lock.json | 884 +++++++++++++++++++++- xtablo-expo/package.json | 8 +- xtablo-expo/stores/auth.tsx | 36 + 12 files changed, 1101 insertions(+), 46 deletions(-) create mode 100644 xtablo-expo/app/(auth)/_layout.tsx create mode 100644 xtablo-expo/app/(auth)/login.tsx create mode 100644 xtablo-expo/lib/supabase.ts create mode 100644 xtablo-expo/metro.config.js create mode 100644 xtablo-expo/stores/auth.tsx diff --git a/xtablo-expo/.env b/xtablo-expo/.env index e20486f..d9a93de 100644 --- a/xtablo-expo/.env +++ b/xtablo-expo/.env @@ -1 +1,3 @@ -EXPO_PUBLIC_STREAM_CHAT_API_KEY="t5vvvddteapa" \ No newline at end of file +EXPO_PUBLIC_STREAM_CHAT_API_KEY="t5vvvddteapa" +EXPO_PUBLIC_SUPABASE_URL=https://mhcafqvzbrrwvahpvvzd.supabase.co +EXPO_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1oY2FmcXZ6YnJyd3ZhaHB2dnpkIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NDEyNDEzMjEsImV4cCI6MjA1NjgxNzMyMX0.Otxn5BWCPD2ABlMM59hCgeur9Tf_Q7PndAbTkqXDPtM \ No newline at end of file diff --git a/xtablo-expo/app/(auth)/_layout.tsx b/xtablo-expo/app/(auth)/_layout.tsx new file mode 100644 index 0000000..9a2f379 --- /dev/null +++ b/xtablo-expo/app/(auth)/_layout.tsx @@ -0,0 +1,15 @@ +import { Redirect, Stack } from "expo-router"; +import { useAuth } from "@/stores/auth"; +import { ActivityIndicator } from "react-native"; + +export default function AuthLayout() { + const { user, loading } = useAuth(); + console.log("user", user); + if (loading) { + return ; + } + if (user) { + return ; + } + return ; +} diff --git a/xtablo-expo/app/(auth)/login.tsx b/xtablo-expo/app/(auth)/login.tsx new file mode 100644 index 0000000..c4048ec --- /dev/null +++ b/xtablo-expo/app/(auth)/login.tsx @@ -0,0 +1,143 @@ +import React, { useState } from "react"; +import { Alert, StyleSheet, View, AppState, Text } from "react-native"; +import { supabase } from "@/lib/supabase"; +import { Button, Input } from "@rneui/themed"; + +// Tells Supabase Auth to continuously refresh the session automatically if +// the app is in the foreground. When this is added, you will continue to receive +// `onAuthStateChange` events with the `TOKEN_REFRESHED` or `SIGNED_OUT` event +// if the user's session is terminated. This should only be registered once. +AppState.addEventListener("change", (state) => { + if (state === "active") { + supabase.auth.startAutoRefresh(); + } else { + supabase.auth.stopAutoRefresh(); + } +}); + +export default function Auth() { + const [email, setEmail] = useState(""); + const [password, setPassword] = useState(""); + const [loading, setLoading] = useState(false); + + async function signInWithEmail() { + setLoading(true); + const { error } = await supabase.auth.signInWithPassword({ + email: email, + password: password, + }); + + if (error) Alert.alert(error.message); + setLoading(false); + } + + async function signUpWithEmail() { + setLoading(true); + const { + data: { session }, + error, + } = await supabase.auth.signUp({ + email: email, + password: password, + }); + + if (error) Alert.alert(error.message); + if (!session) + Alert.alert("Please check your inbox for email verification!"); + setLoading(false); + } + + return ( + + Welcome! + Sign in or create an account + + setEmail(text)} + value={email} + placeholder="email@address.com" + autoCapitalize={"none"} + /> + + + setPassword(text)} + value={password} + secureTextEntry={true} + placeholder="Password" + autoCapitalize={"none"} + /> + + +