main page
This commit is contained in:
commit
7fb446c53a
8943 files changed
+1209030
No files matched your search
@@ -0,0 +1,102 @@
|
||||
import { createContext, useContext, useState, useEffect } from 'react'
|
||||
import { account } from '../lib/appwrite'
|
||||
|
||||
const AuthContext = createContext()
|
||||
|
||||
// Demo mode when Appwrite is not configured
|
||||
const DEMO_MODE = !import.meta.env.VITE_APPWRITE_PROJECT_ID
|
||||
|
||||
export function AuthProvider({ children }) {
|
||||
const [user, setUser] = useState(null)
|
||||
const [loading, setLoading] = useState(true)
|
||||
|
||||
useEffect(() => {
|
||||
checkUser()
|
||||
}, [])
|
||||
|
||||
async function checkUser() {
|
||||
if (DEMO_MODE) {
|
||||
// Check localStorage for demo session
|
||||
const demoUser = localStorage.getItem('demo_user')
|
||||
if (demoUser) {
|
||||
setUser(JSON.parse(demoUser))
|
||||
}
|
||||
setLoading(false)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
const session = await account.get()
|
||||
setUser(session)
|
||||
} catch (error) {
|
||||
setUser(null)
|
||||
} finally {
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
async function login(email, password) {
|
||||
if (DEMO_MODE) {
|
||||
// Demo login - accept any credentials
|
||||
const demoUser = { $id: 'demo', email, name: email.split('@')[0] }
|
||||
localStorage.setItem('demo_user', JSON.stringify(demoUser))
|
||||
setUser(demoUser)
|
||||
return { success: true }
|
||||
}
|
||||
|
||||
try {
|
||||
await account.createEmailPasswordSession(email, password)
|
||||
await checkUser()
|
||||
return { success: true }
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message }
|
||||
}
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
if (DEMO_MODE) {
|
||||
localStorage.removeItem('demo_user')
|
||||
setUser(null)
|
||||
return
|
||||
}
|
||||
|
||||
try {
|
||||
await account.deleteSession('current')
|
||||
setUser(null)
|
||||
} catch (error) {
|
||||
console.error('Logout error:', error)
|
||||
}
|
||||
}
|
||||
|
||||
async function register(email, password, name) {
|
||||
if (DEMO_MODE) {
|
||||
return login(email, password)
|
||||
}
|
||||
|
||||
try {
|
||||
await account.create('unique()', email, password, name)
|
||||
await login(email, password)
|
||||
return { success: true }
|
||||
} catch (error) {
|
||||
return { success: false, error: error.message }
|
||||
}
|
||||
}
|
||||
|
||||
const value = {
|
||||
user,
|
||||
loading,
|
||||
login,
|
||||
logout,
|
||||
register
|
||||
}
|
||||
|
||||
return (
|
||||
<AuthContext.Provider value={value}>
|
||||
{children}
|
||||
</AuthContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
export function useAuth() {
|
||||
return useContext(AuthContext)
|
||||
}
|
||||
Reference in new issue
Block a user