【发布时间】:2020-10-28 22:19:24
【问题描述】:
问题:我在尝试注册新用户时仅在使用邮递员时不断收到标题错误,不知道为什么。
另外,代理问题:无法代理请求 /api/auth/register?hello&world 从 localhost:3000 到 http://localhost:8080/。
我试图解决代理的事情是
在包json中添加"secure": false。
我的 auth.js 文件:
exports.postRegister = async (req, res, next) => {
// User object
const newUser = {
username: req.body.username,
password: req.body.password,
};
// Check if user exists
try {
const user = await User.findOne({ username: newUser.username });
if (user) {
const error = new Error("Username already taken.");
error.statusCode = 422;
return next(error);
}
} catch (error) {
error.statusCode = error.statusCode || 500;
next(error);
}
// creating a hash from the given password
bcrypt.genSalt(12, (err, salt) => {
if (err) {
return next(err);
}
bcrypt.hash(newUser.password, salt, null, async (err, hash) => {
if (err) {
return next(err);
}
try {
// set hashed password as the password field in newUser object.
newUser.password = hash;
// Save newUser
const createdUser = new User(newUser);
await createdUser.save();
// Create jwt token and send
const token = await genToken(createdUser._id, createdUser.username);
res.status(201).json({
success: true,
token,
});
} catch (err) {
err.statusCode = err.statusCode || 500;
next(err);
}
});
});
};
Server.js 文件:
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const helmet = require("helmet");
const cors = require("cors");
require("dotenv").config();
const mailRoutes = require("./routes/mail");
const authRoutes = require("./routes/auth");
const app = express();
app.use(bodyParser.json());
app.use(helmet());
app.use(cors());
// Routes
app.use("/api/mail", mailRoutes);
app.use("/api/auth", authRoutes);
app.use((error, req, res, next) => {
console.log(error.message);
res.status(error.statusCode).json({
error: true,
messages: [error.message],
});
});
mongoose.connect(process.env.DB_URI, (err) => {
if (err) {
console.log(err);
} else {
console.log("DB Connected");
}
});
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => {
console.log(`Server has started at ${PORT}`);
});
【问题讨论】:
-
尝试控制台记录传递给 bcrypt 的密码和盐值。
-
salt 返回一堆随机乱码,这意味着它的工作原理与密码相同,它通过正确的用户输入
-
但错误说明相反。它说需要数据和盐,这意味着您没有将它们传递给 bcrypt。
-
所以显然 bcrypt.hash 内部的控制台日志没有记录,所以我猜它没有访问它可能是我的问题。有什么想法吗?
标签: javascript reactjs express authentication bcrypt