FormLogin.js
import { validate as isEmail } from "email-validator"; import $ from "jquery"; import React, { Component } from "react"; import ReCAPTCHA from "react-google-recaptcha"; import { withRouter } from "react-router-dom"; import { loginMotorista } from "../../../actions/MotoristaActions"; class FormLogin extends Component { constructor(props) { super(); this.state = { email: "", senha: "", captcha: false, valorCaptcha: "", codigoCapctha: process.env.REACT_APP_RECAPTCHA, }; this.camposObrigatorios = ["email", "senha"]; } recaptchaRef = React.createRef(); onChange = async () => { const recaptchaValue = await this.recaptchaRef.current.getValue(); this.setState({ captcha: true }); this.setState({ valorCaptcha: recaptchaValue }); console.log("recaptchaValue: " + recaptchaValue); }; componentDidMount() { $(".box-input").click(function () { var label = $(this).find(".input-label"); var input = $("#" + label.attr("for")); label.removeClass("input-label"); label.addClass("input-label-sm"); input.removeClass("input-hide"); $(".box-input-sel").removeClass("box-input-sel"); $(this).addClass("box-input-sel"); input.trigger("click"); }); localStorage.removeItem("editar_meus_aplicativos"); localStorage.removeItem("meus_aplicativos"); } _logar = async () => { $(".alertCamposObrigatorios").hide(); let formOk = true; console.log("email: " + this.state.email); console.log("senha: " + this.state.senha); console.log("captcha: " + this.state.captcha); this.camposObrigatorios.forEach(function (item) { if ($("#" + item).val() === "") { $(".alertCamposObrigatorios").show(); formOk = false; } }); if ($("#email").val() !== "" && !isEmail($("#email").val())) { $(".alertCamposObrigatorios").show(); formOk = false; } if (!this.state.captcha) { $(".alertCamposObrigatorios").show(); formOk = false; } if (formOk) { let { email, senha, captcha, valorCaptcha } = this.state; $(".loader-main").removeClass("loader-inactive"); const retorno = await loginMotorista({ email, senha, captcha, valorCaptcha, }); if (retorno) { this.props.history.push("/primeiro-acesso"); } } }; _updateField = async function (event) { let dados = this.state; dados[event.target.id] = event.target.value.trim(); await this.setState(dados); }; _updateFieldEmail = async function (event) { if (/^[^ ,;:<>()[\]\\|/]*$/.test(event.target.value.trim())) { this._updateField(event); } }; render() { return ( <div className="page-content header-clear"> <div className="title title-36">LOGIN</div> <div className="space-32"></div> <div className="cf-texto div-body margin-30"> Insira seus dados para entrar </div> <div className="space-71"></div> <div className="alertCamposObrigatorios alert-danger margin-25" style={{ padding: "6px", display: "none" }} > Todos campos são obrigatórios. </div> <div className="alert alert-danger margin-25" style={{ padding: "6px", display: "none" }} > Login ou senha inválidos. </div> <div className="box-input-only2 margin-25"> <input type="text" id="email" className="box-input-only input2" value={this.state.email} onChange={(e) => { this._updateFieldEmail(e); }} /> <label className={ this.state.email === "" ? "input-label2" : "input-label-sm2" } htmlFor="email" > E-mail </label> </div> <div className="box-input-only2 margin-25 space-12"> <input type="password" id="senha" className="box-input-only input2" value={this.state.senha} onChange={(e) => { this._updateField(e); }} /> <label className={ this.state.email === "" ? "input-label2" : "input-label-sm2" } htmlFor="senha" > Senha </label> </div> <div className="box-input-only2 margin-25 space-12"> <ReCAPTCHA id="captcha" ref={this.recaptchaRef} value={this.state.captcha} sitekey={this.state.codigoCapctha} onChange={(e) => { this.onChange(e); }} /> </div> <div className="space-12"></div> <div className="cf-texto div-body margin-27"> <a href="/esqueci-senha" className="label-purple"> ESQUECI MINHA SENHA <i className="fas fa-chevron-right icon-14"></i> </a> </div> <div className="space-26"></div> <div className="div-center"> <button className="bt-login margin-30" onClick={() => this._logar()}> ENTRAR <i className="fas fa-chevron-right icon-14 float-right"></i> </button> </div> <div className="space-26"></div> </div> ); } } export default withRouter(FormLogin);
MotoristaActions.js
import axios from "axios"; import $ from "jquery"; import auth from "../auth/initAuth"; const config = { headers: { Authorization: "Bearer " + localStorage.getItem("id_token") }, }; const urlAPI = process.env.REACT_APP_URL_API_BASE; const servico = "/motorista/"; export const loginMotorista = async ({ email, senha, captcha, valorCaptcha, }) => { return await axios .post( urlAPI + servico + "login", { email: email, password: senha, captcha, valorCaptcha }, config ) .then((response) => { if (response.data && response.data.isOk) { localStorage.setItem("motorista_logado", JSON.stringify(response.data)); if (response.data.primeiro_acesso) { return response.data; } else { auth.login(email, senha, (err, authResult) => { if (err) { $(".alert").show(); $(".loader-main").addClass("loader-inactive"); localStorage.removeItem("motorista_logado"); return true; } if (authResult && authResult.idToken && authResult.accessToken) { this.setToken(authResult.accessToken, authResult.idToken); window.location = window.location.origin; } }); } } else { $(".alert").show(); $(".loader-main").addClass("loader-inactive"); } }) .catch((error) => { if (error.response && error.response.data) { $(".alert").show(); $(".loader-main").addClass("loader-inactive"); } }); };
App.js
export default class App extends React.Component { render() { return ( <BrowserRouter> <Switch> <Route exact path="/" component={Home} /> <Route exact path="/home" component={Home} /> <Route path="/como-funciona" component={ComoFunciona} /> <Route path="/login" component={Login} /> <Route path="/esqueci-senha" component={EsqueciSenha} /> <Route path="/recadastrar-senha" component={RecadastrarSenha} /> <Route path="/meu-perfil" component={MeuPerfil} /> <Route path="/fale-conosco" component={FaleConosco} /> <Route path="/cadastro" component={Cadastro} /> <Route path="/cadastro-acompanhamento" component={CadastroAcompanhamento} /> <Route path="/termos-servico" component={TermosServico} /> <Route exact path="/agendamento" component={Agendamento} /> <Route exact path="/agendamento/:passo" component={Agendamento} /> <Route path="/agendamento/:passo/:reagendar" component={Agendamento} /> <Route path="/dados-pessoais" component={MeusDados} /> <Route path="/endereco" component={MeuEndereco} /> <Route path="/minha-senha" component={MinhaSenha} /> <Route path="/meus-aplicativos" component={MeusAplicativos} /> <Route path="/verificacao" component={Verificacao} /> <Route path="/ativar-equipamento" component={AtivarEquipamento} /> <Route path="/callback" component={Callback} /> <Route exact path="/primeiro-acesso" component={PrimeiroAcesso} /> <Route component={ErrorPage} /> </Switch> </BrowserRouter> ); } }
primeiro-acesso
index.js
import React, { Component } from "react"; import { Route, Switch, withRouter } from "react-router-dom"; import TopoSemMenu from "../../components/TopoSemMenu"; import FormPrimeiroAcesso from "./components/FormPrimeiroAcesso"; class PrimeiroAcesso extends Component { render() { return ( <div> <TopoSemMenu /> <Switch> <Route exact path="/primeiro-acesso" component={() => <FormPrimeiroAcesso />} /> </Switch> </div> ); } } export default withRouter(PrimeiroAcesso);
FormPrimeiroAcesso.js
import $ from "jquery"; import React, { Component } from "react"; import { withRouter } from "react-router-dom"; import auth from "../../../auth/initAuth"; const validations = require("../validations"); const formHelp = require("../../../helpers/FormHelpMsg"); const MotoristaActions = require("../../../actions/MotoristaActions"); class FormPrimeiroAcesso extends Component { constructor(props) { super(); this.state = { novaSenha: "", confNovaSenha: "", ZreceberWhatsApp: false, showForm: true, show: false, error: false, }; this.camposObrigatorios = ["novaSenha", "confNovaSenha"]; } componentDidMount = async () => { $(".loader-main").addClass("loader-inactive"); let motorista_logado = localStorage.getItem("motorista_logado"); if (typeof motorista_logado !== "undefined" && motorista_logado !== null) { motorista_logado = JSON.parse(motorista_logado); } else { window.location = "/login"; } }; _updateField = async (event) => { let dados = this.state; dados[event.target.id] = event.target.value; await this.setState(dados); }; _gravar = () => { let formOk = true; this.camposObrigatorios.forEach(function (item) { if ($("#" + item).val() === "") { $("#" + item) .parent() .addClass("box-input-required"); formOk = false; } }); if (this.state.novaSenha !== this.state.confNovaSenha) { $("#confNovaSenha").parent().addClass("box-input-required"); this.setState({ error: "Senha e confirmação da nova senha devem ser iguais.", }); formOk = false; } if (this.state.novaSenha !== "") { let strongRegex = new RegExp( "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#$%^&*])(?=.{8,})" ); if (!strongRegex.test(this.state.novaSenha)) { this.setState({ error: 'A senha deve combinar letras maiúsculas, minúsculas, números e um dos seguintes caracteres "!@#$%^&*".', }); formOk = false; } } if (formOk) { $(".loader-main").removeClass("loader-inactive"); const motorista = JSON.parse(localStorage.getItem("motorista_logado")); let { novaSenha } = this.state; auth.signup(motorista.email, novaSenha, function (err) { if (err) { this.setState({ error: "Erro ao alterar sua senha, tente novamente mais tarde.", }); formOk = false; } else { MotoristaActions.alterarSenhaPrimeiroAcesso(motorista.email) .then((response) => { if (response.data.isOk) { } else { if (response.data.message) { this.setState({ error: response.data.message }); } else { this.setState({ error: "Erro ao alterar sua senha, tente novamente mais tarde.", }); } } $(".loader-main").addClass("loader-inactive"); }) .catch((error) => { this.setState({ error: error.message }); $(".loader-main").addClass("loader-inactive"); }); } }); } }; _validarCampo = async (event) => { let campo = event.target.id; let valor = event.target.value; formHelp.hideHelp(campo, "box-input-required"); if (campo === "novaSenha") { validations.validarCampoSenha(valor); } else if (campo === "senha_confirma") { validations.validarCampoConfirmaSenha($("#senha").val(), valor); } }; render() { return ( <div className="page-content header-clear cadastro"> <div className="title title-32 text-center text-destaque"> Alterar sua senha primeiro neste primeiro acesso ! </div> <div className="div-separator"> <div className="div-progress" style={{ width: "50%" }}></div> <div className="div-progress-bullet"></div> </div> <div className="space-16"></div> <div className="box-input margin-25" id="senhaInputContainer"> <label className="input-label" htmlFor="novaSenha"> Nova senha </label> <input type="password" id="novaSenha" className="input input-hide" placeholder="Mínimo de 6 dígitos" value={this.state.novaSenha} onChange={(e) => { this._updateField(e); }} onBlur={(e) => { this._validarCampo(e); }} /> <span className="help-inline"></span> </div> <div className="box-input margin-25" style={this.state.showForm ? {} : { display: "none" }} > <label className="input-label" htmlFor="confNovaSenha"> Confirme a nova senha </label> <input type="password" id="confNovaSenha" className="input input-hide" value={this.state.confNovaSenha} placeholder="Mínimo de 6 dígitos" onChange={(e) => { this._updateField(e); }} onBlur={(e) => { this._validarCampo(e); }} /> </div> <div className="space-26"></div> <div className="div-center"> <button className="bt-login margin-30" onClick={() => this._gravar()} style={this.state.showForm ? {} : { display: "none" }} > ALTERAR A SENHA </button> </div> </div> ); } } export default withRouter(FormPrimeiroAcesso);
Toda a execução está correta, quando é para ir para FormPrimeiroAcesso, só que não consigo digitar nada no componente e quando aperto F5, ele limpa localStorage.getItem(“motorista_logado”) e volta para a tela de logn
O que pode ser ?