const form = {
firstname: "",
lastname: "",
email: "",
password: "",
gender: "",
dob: "",
username: ""
};
export default class Login extends React.Component {
constructor (props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.state = {
}
}
handleSubmit (event) {
event.preventDefault();
api.signin(this.state)
}
handleChange (event, type) {
form[type] = event.target.value;
this.setState({
form
})
}
render() {
return (
<div>
<nav className="navbar navbar-expand-md navbar-dark bg-dark fixed-top">
<a className="navbar-brand" href="#">ChatBox</a>
<button className="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault">
<span className="navbar-toggler-icon"></span>
</button>
<div className="collapse navbar-collapse" id="navbarsExampleDefault">
<ul className="navbar-nav mr-auto">
<li className="nav-item active">
<a className="nav-link" href="#">Home <span className="sr-only">(current)</span></a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">Link</a>
</li>
<li className="nav-item">
<a className="nav-link" href="#">Disabled</a>
</li>
<li className="nav-item dropdown">
<a className="nav-link dropdown-toggle" href="http://example.com" id="dropdown01" data-toggle="dropdown">Dropdown</a>
<div className="dropdown-menu" aria-labelledby="dropdown01">
<a className="dropdown-item" href="#">Action</a>
<a className="dropdown-item" href="#">Another action</a>
<a className="dropdown-item" href="#">Something else here</a>
</div>
</li>
</ul>
</div>
</nav>
<main role="main" className="container">
<div className="starter-template">
<h1>Register for ChatBox</h1>
<form >
<div className="d-flex justify-content-center bd-highlight mb-3">
<div className="p-2">
<label htmlFor="firstname">First Name</label>
<input type="text" className="form-control" id="firstname" placeholder="First Name" onChange={
(e)=>{ this.handleChange(e, 'firstname')}
}/>
</div>
<div className="p-2">
<label htmlFor="lastname">Last Name</label>
<input type="text" className="form-control" id="lastname" placeholder="Last Name" onChange={
(e)=>{ this.handleChange(e, 'lastname')}
} />
</div>
</div>
<div className="form-group col-md-6">
<label htmlFor="inputEmail4">Email</label>
<input type="email" className="form-control" id="inputEmail4" placeholder="Email" onChange={
(e)=>{ this.handleChange(e, 'email')}
}/>
</div>
<div className="form-group col-md-6">
<label htmlFor="username">Username</label>
<input type="text" className="form-control" id="username" placeholder="Username" onChange={
(e)=>{ this.handleChange(e, 'username')}
}/>
</div>
<div className="form-group col-md-6">
<label htmlFor="inputPassword4">Password</label>
<input type="password" className="form-control" id="inputPassword4" placeholder="Password" onChange={
(e)=>{ this.handleChange(e, 'password')}
}/>
</div>
<div className="form-group col-md-6">
<label htmlFor="gender">Gender</label>
<select id="gender" className="form-control" onChange={ (e)=>{ this.handleChange(e, 'gender')} }>
<option >Choose...</option>
<option value="male">Male</option>
<option value="female">Female</option>
</select>
</div>
<div className="form-group col-md-6 " >
<label htmlFor="date">D.O.B</label>
<input type="date" className="form-control" id="date" placeholder="date" onChange={ (e)=>{ this.handleChange(e, 'dob')} }/>
</div>
<div className="form-group col-md-2">
<input type="submit" onClick={this.handleSubmit} className="form-control bg-info text-white" id="submit" placeholder="Password" />
</div>
</form>
</div>
</main>
</div>
)
}
}
以这样的状态存储表单数据是一种好的做法还是有更好的方法?
输入的密码可以从 devtools 中看到为纯文本。如何避免这种情况我的意思是任何加密密码并将其发送到后端的方法。
我对这个很陌生。如果有人检查这是否是编写代码的好习惯,将会很有帮助。
最佳答案
只要您使用 HTTPS 连接并将其作为表单参数发送,就无需在将密码发送到后端之前在前端对其进行加密。 但是,您不应将密码存储在浏览器本地存储中,您可以向后端请求一个连接 token ,您将其存储为 session 标识符。
关于javascript - 如何将加密形式的密码从 ReactJS 发送到 ExpressJS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47122923/