Когда пользователь нажимает кнопку login , пользователь должен получить соответствующее окно с предупреждением, если вход в систему успешен или неуспешен. При нажатии на кнопку запускается функция useDetails (). Во внешнем интерфейсе пользователь может либо ввести электронную почту, либо мобильный телефон, и пароль является обязательным, но onClick запускает функцию 2 раза, и в результате 2 раза появляется окно предупреждения ie, остальная часть выполняется каждый раз
import React, { useState } from 'react'
import { Form, FormGroup, Label, Input, Button, Card, CardTitle, Row, Col } from 'reactstrap'
import firebase from "../firebase";
function Login() {
const [email, setEmail] = useState('');
const [mobile, setMobile] = useState('');
const [password, setPassword] = useState('');
var CryptoJS = require("crypto-js");
function useDetails() {
firebase
.firestore()
.collection("users")
.get().then((snapshot) => {
snapshot.docs.forEach((doc) => {
// console.log(doc.data().Mobile);
var bytes = CryptoJS.AES.decrypt(doc.data().Password, 'secret key 123');
var plaintext = bytes.toString(CryptoJS.enc.Utf8);
var fname = doc.data().Full_name;
if (email === '' && mobile === doc.data().Mobile) {
if (password === plaintext) {
alert("Successfully logged in as : " + fname);
}
else { alert("Wrong 1 or more credentials.."); }
}
else if (mobile === '' && email === doc.data().E_mail) {
if (password === plaintext) {
alert("Successfully logged in as : " + fname);
}
else { alert("Wrong 1 or more credentials.."); }
}
else {
alert("For a successful login either enter Mobile no. or enter Email id and password is mandatory");
}
})
});
setEmail('');
setMobile('');
setPassword('');
}
const [passwordType, setPasswordType] = useState('password');
const [passwordToggleText, setPasswordToggleText] = useState('Show');
const passwordToggle = () => {
if (passwordType === "password") {
setPasswordType('text')
setPasswordToggleText('Hide')
}
else {
setPasswordType('password')
setPasswordToggleText('Show')
}
}
return (
<Form className="form col-12" >
<Row>
<Card body >
<CardTitle><h4><b>Log In</b></h4></CardTitle>
<FormGroup>
<Row>
<Col><Label className="label ml-3">Mobile</Label></Col>
</Row>
<Row>
<Col xs="3" className="ml-3">
<Input type="code" placeholder="+91" readOnly />
</Col>
<Col xs="8">
<Input type="text" placeholder="Mobile" value={mobile} onChange={e => setMobile(e.target.value)} />
</Col>
</Row>
<Col className="separator mt-4 text-muted"> O R </Col>
<Col>
<Label className="label">Email</Label>
<Input type="email" placeholder="Email" value={email} onChange={e => setEmail(e.target.value)} />
</Col>
<Col className="separator mt-4 text-muted"> A N D </Col>
<Col>
<Label className="label">Password</Label>
<Input type={passwordType} placeholder="Password" value={password} onChange={e => setPassword(e.target.value)} />
<span className="togglePassword" onClick={passwordToggle}><b>{passwordToggleText}</b></span>
</Col>
</FormGroup>
<Button color="primary" size="lg" block onClick={useDetails}>Log In</Button>
</Card>
</Row>
</Form>
)
}
export default Login
* Код 1007 * выше - это полный пример, а код ниже - это часть, с которой я сталкиваюсь в
import React, { useState } from 'react'
import { Form, FormGroup, Label, Input, Button, Card, CardTitle, Row, Col }from 'reactstrap'
import firebase from "../firebase";
function Login() {
const [email, setEmail] = useState('');
const [mobile, setMobile] = useState('');
const [password, setPassword] = useState('');
var CryptoJS = require("crypto-js");
function useDetails() {
firebase
.firestore()
.collection("users")
.get().then((snapshot) => {
snapshot.docs.forEach((doc) => {
// console.log(doc.data().Mobile);
var bytes = CryptoJS.AES.decrypt(doc.data().Password, 'secret key 123');
var plaintext = bytes.toString(CryptoJS.enc.Utf8);
var fname = doc.data().Full_name;
if (email === '' && mobile === doc.data().Mobile) {
if (password === plaintext) {
alert("Successfully logged in as : " + fname);
}
else { alert("Wrong 1 or more credentials.."); }
}
else if (mobile === '' && email === doc.data().E_mail) {
if (password === plaintext) {
alert("Successfully logged in as : " + fname);
}
else { alert("Wrong 1 or more credentials.."); }
}
else {
alert("For a successful login either enter Mobile no. or enter Email id and password is mandatory");
}
})
});
setEmail('');
setMobile('');
setPassword('');
}
return (
<Form className="form col-12" >
<Row>
<Card body >
<CardTitle><h4><b>Log In</b></h4></CardTitle>
<Button color="primary" size="lg" block onClick={useDetails}>Log In</Button>
</Card>
</Row>
</Form>
)
}
export default Login
При каждом нажатии кнопки остальная часть выполняется даже если другая if и else-if части исполняются Это ссылка для веб-сайта. , затем нажмите кнопку входа в систему
Email: rijusaha1234@gmail.com Пароль: Mypassword1 #