correção
This commit is contained in:
@@ -12,6 +12,7 @@ import { Button } from '../components/ui/button'
|
||||
import { Card } from '../components/ui/card'
|
||||
import { LogIn } from 'lucide-react'
|
||||
import { supabase } from '../lib/supabase'
|
||||
import { useApp } from '../context/AppContext'
|
||||
|
||||
export default function AuthLogin() {
|
||||
const [email, setEmail] = useState('')
|
||||
@@ -21,21 +22,19 @@ export default function AuthLogin() {
|
||||
|
||||
// Utilização do hook do react-router-dom para navegação entre páginas web
|
||||
const navigate = useNavigate()
|
||||
const { user } = useApp()
|
||||
|
||||
/**
|
||||
* Hook executado na montagem inicial do componente.
|
||||
* Interage diretamente com o método `getSession` do Supabase para verificar
|
||||
* de forma assíncrona se o utilizador possui um token de sessão válido na cache/local storage.
|
||||
* Se os dados do utilizador confirmarem autenticação ativa, redireciona o fluxo para '/explorar'.
|
||||
* Interage diretamente com o AppContext para verificar
|
||||
* de forma reativa se o utilizador já está logado.
|
||||
* Se os dados do utilizador confirmarem autenticação ativa, redireciona o fluxo consoante a role.
|
||||
*/
|
||||
useEffect(() => {
|
||||
supabase.auth.getSession().then(({ data }) => {
|
||||
// Confirma a existência num objeto global não nulo associado ao session
|
||||
if (data.session) {
|
||||
navigate('/explorar', { replace: true })
|
||||
}
|
||||
})
|
||||
}, [navigate])
|
||||
if (user) {
|
||||
navigate(user.role === 'barbearia' ? '/painel' : '/explorar', { replace: true })
|
||||
}
|
||||
}, [user, navigate])
|
||||
|
||||
/**
|
||||
* Manipula a submissão do formulário na view para validar as credenciais.
|
||||
@@ -49,18 +48,19 @@ export default function AuthLogin() {
|
||||
try {
|
||||
// Comunicação via API REST do Supabase para Login
|
||||
// A biblioteca gera pedido POST com as credenciais (Email e JSON PW) para endpoint /token
|
||||
const { error } = await supabase.auth.signInWithPassword({
|
||||
const { data, error } = await supabase.auth.signInWithPassword({
|
||||
email,
|
||||
password,
|
||||
})
|
||||
if (error) throw error
|
||||
|
||||
// Sucesso na verificação origina redirecionamento do Auth
|
||||
navigate('/explorar', { replace: true })
|
||||
// Sucesso na verificação origina redirecionamento baseado na rule (metadados guardados no Auth)
|
||||
const role = data.user?.user_metadata?.role
|
||||
if (role) {
|
||||
navigate(role === 'barbearia' ? '/painel' : '/explorar', { replace: true })
|
||||
}
|
||||
} catch (e: any) {
|
||||
setError('Credenciais inválidas ou email não confirmado')
|
||||
} finally {
|
||||
// Reset da flag de estado da UI, quer dê erro quer não
|
||||
setLoading(false)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user