Skip to content

Commit

Permalink
Criação das telas validaCod e redefineSenha
Browse files Browse the repository at this point in the history
  • Loading branch information
Kauan-F20 committed Dec 18, 2024
1 parent 11aeb1e commit e008ca8
Show file tree
Hide file tree
Showing 2 changed files with 227 additions and 0 deletions.
133 changes: 133 additions & 0 deletions src/app/private/pages/redefineSenha.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
import React, { useState } from "react";
import { resetPassword } from "../../services/user.service"; // Importando o serviço para redefinir a senha
import { Alert, Text, View, TextInput, StyleSheet, TouchableOpacity } from "react-native";
import { router } from "expo-router";

// Função de serviço para redefinir a senha
export const resetPassword = async (email, codigo, novaSenha) => {
try {
const response = await axios.post('/api/reset-password', { email, codigo, novaSenha });
return response.data; // Retorna a resposta da API
} catch (error) {
console.error('Erro ao redefinir senha:', error);
throw error;
}
};

export default function RedefinirSenha() {
const [email, setEmail] = useState(""); // Para capturar o email do usuário
const [codigo, setCodigo] = useState(""); // Para capturar o código de recuperação
const [newPassword, setNewPassword] = useState(""); // Nova senha
const [confirmPassword, setConfirmPassword] = useState(""); // Confirmar nova senha

// Função para tratar a redefinição de senha
const handleRedefinirSenha = async () => {
if (!email || !codigo || !newPassword || !confirmPassword) {
Alert.alert("Erro", "Por favor, preencha todos os campos.");
return;
}
if (newPassword !== confirmPassword) {
Alert.alert("Erro", "As senhas não coincidem.");
return;
}
try {
const response = await resetPassword(email, codigo, newPassword); // Chama o serviço para redefinir a senha
if (response.success) {
Alert.alert("Sucesso", "Senha redefinida com sucesso!");
router.push("/public/login"); // Redireciona para a página de login
} else {
Alert.alert("Erro", response.message || "Erro ao redefinir senha.");
}
} catch (error) {
console.error("Erro ao redefinir a senha:", error);
Alert.alert("Erro", "Ocorreu um problema ao redefinir a senha.");
}
};

return (
<View style={styles.container}>
<Text style={styles.title}>Redefinir Senha</Text>

{/* Input para o email */}
<TextInput
style={styles.input}
placeholder="Email"
keyboardType="email-address"
value={email}
onChangeText={setEmail}
/>

{/* Input para o código de recuperação */}
<TextInput
style={styles.input}
placeholder="Código de recuperação"
value={codigo}
onChangeText={setCodigo}
/>

{/* Input para a nova senha */}
<TextInput
style={styles.input}
placeholder="Nova senha"
secureTextEntry
value={newPassword}
onChangeText={setNewPassword}
/>

{/* Input para confirmar a nova senha */}
<TextInput
style={styles.input}
placeholder="Confirme a nova senha"
secureTextEntry
value={confirmPassword}
onChangeText={setConfirmPassword}
/>

{/* Botão para redefinir a senha */}
<TouchableOpacity style={styles.button} onPress={handleRedefinirSenha}>
<Text style={styles.buttonText}>Redefinir</Text>
</TouchableOpacity>
</View>
);
}

// Estilos reutilizados
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#FFF",
padding: 20,
},
title: {
fontSize: 28,
fontWeight: "300",
textAlign: "center",
marginBottom: 20,
},
input: {
width: "90%",
maxWidth: 400,
paddingVertical: 12,
paddingHorizontal: 10,
fontSize: 16,
borderWidth: 1,
borderColor: "#CCC",
borderRadius: 8,
marginBottom: 15,
},
button: {
width: "90%",
maxWidth: 200,
backgroundColor: "#2CCDB5",
paddingVertical: 12,
borderRadius: 8,
alignItems: "center",
},
buttonText: {
color: "#FFF",
fontSize: 16,
fontWeight: "600",
},
});
94 changes: 94 additions & 0 deletions src/app/private/pages/validaCod.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
import React, { useState } from "react";
import { validateToken } from "../../services/user.service"; // Importando o serviço de validação do token
import { Alert, Text, View, TextInput, StyleSheet, TouchableOpacity } from "react-native";
import { router } from "expo-router";

// Função de serviço para validar o token (do código enviado por e-mail)
export const validateToken = async (token) => {
try {
const response = await axios.post('/api/validate-code', { codigo: token }); // Envia o código para validação no backend
return response.data; // Retorna a resposta da API
} catch (error) {
console.error('Erro ao validar token:', error);
throw error;
}
};

export default function ValidarToken() {
const [token, setToken] = useState(""); // Estado para armazenar o token recebido do usuário

// Função para tratar a validação do token
const handleValidarToken = async () => {
if (!token) {
Alert.alert("Erro", "Por favor, insira o código recebido por e-mail.");
return;
}
try {
const response = await validateToken(token); // Chamando a API para validar o token
if (response.success) {
Alert.alert("Sucesso", "Token validado com sucesso!");
router.push("/private/redefinirSenha"); // Redireciona para a tela de redefinição de senha
} else {
Alert.alert("Erro", response.message || "Token inválido.");
}
} catch (error) {
console.error("Erro ao validar o token:", error);
Alert.alert("Erro", "Ocorreu um problema ao validar o token.");
}
};

return (
<View style={styles.container}>
<Text style={styles.title}>Validar Código</Text>

{/* Campo de entrada para o código de validação */}
<TextInput
style={styles.input}
placeholder="Insira o código recebido"
value={token}
onChangeText={setToken} // Atualiza o estado do token com o texto inserido
/>

{/* Botão para validar o código */}
<TouchableOpacity style={styles.button} onPress={handleValidarToken}>
<Text style={styles.buttonText}>Validar</Text>
</TouchableOpacity>
</View>
);
}

// Estilos
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: "center",
justifyContent: "center",
padding: 16,
backgroundColor: "#f5f5f5", // Cor de fundo da tela
},
title: {
fontSize: 24,
fontWeight: "bold",
marginBottom: 20,
},
input: {
width: "100%",
padding: 10,
borderWidth: 1,
borderColor: "#ccc",
borderRadius: 8,
marginBottom: 16,
backgroundColor: "#fff",
},
button: {
backgroundColor: "#007BFF", // Cor do botão
padding: 12,
borderRadius: 8,
width: "100%",
alignItems: "center", // Centraliza o texto dentro do botão
},
buttonText: {
color: "#fff", // Cor do texto no botão
fontWeight: "bold",
},
});

0 comments on commit e008ca8

Please sign in to comment.