您需要将登录名和哈希都放在同一路由中。下面是hash.js
const express = require("express");
const bcrypt = require("bcrypt");
const router = express.Router();
const users = [];
router.post("/register", async (req, res) => {
try {
const salt = await bcrypt.genSalt();
const passwordHash = await bcrypt.hash(req.body.password, salt);
console.log(passwordHash);
users.push({ username: req.body.username, password: passwordHash });
res.json(users);
} catch (e) {
res.status(500).send(e.toString());
}
});
router.post("/login", async (req, res) => {
try {
const user = users.find((user) => user.username === req.body.username);
console.log(user);
if (!user) {
res.status(400).send("User Not Found!");
}
if (await bcrypt.compare(req.body.password, user.password)) {
res.send("LoggedIn");
} else {
res.send("Not Valid User!");
}
} catch (e) {
console.log(e.toString());
}
});
module.exports = router;
然后将 hash.js 导入你的 server.js。我在“视图”中创建了简单的 login.ejs 和 register.ejs 进行测试。有用。
const express = require("express");
const app = express();
const hash = require("./hash");
app.use(express.json());
app.set("view engine", "ejs");
app.use(express.urlencoded({ extended: false }));
app.get("/login", (req, res) => {
res.render("login.ejs");
});
app.get("/", (req, res) => {
res.render("register.ejs");
});
app.use("/", hash);
app.listen(3000);
注册.ejs
<h1>Register</h1>
<form action="/register" method="POST">
<div>
<label for="name">Name</label>
<input type="text" id="name" name="username" required>
</div>
<div>
<label for="password">Password</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Register</button>
</form>
登录.ejs
<h1>Login</h1>
<form action="/login" method="POST">
<div>
<label for="username">Username</label>
<input type="text" id="username" name="username" required>
</div>
<div>
<label for="password">Password</label>
<input type="password" id="password" name="password" required>
</div>
<button type="submit">Login</button>
</form>