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"} + /> + + +