forked from fga-eps-mds/2024-1-GEROcuidado-Front
-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Criação das telas validaCod e redefineSenha
- Loading branch information
Showing
2 changed files
with
227 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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", | ||
}, | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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", | ||
}, | ||
}); |