所以,我的 React 前端位于 http://localhost:3000/ ,而 Express 后端位于 http://localhost:8080/
当我尝试提交注册表单时,chrome 控制台返回错误: 'POST http://localhost:3000/api/users 403 (Forbidden)'
我在堆栈上做了一些研究,发现我应该使用
cors
,但所有确切的建议都没有帮助
(如果整个问题实际上很简单,我真的很抱歉,这是我的第一个反应和表达项目,如果这有什么区别的话)
所以如果有人告诉我我错过了哪些确切的代码行以及我应该把它放在哪里
,我会非常高兴另外,我已经用邮递员测试了它,服务器端一切正常
这是我的后端:
服务器.js
const express = require('express');
const connectDB = require('./config/db');
const cors = require('cors');
const app = express();
// connect database
connectDB();
// init middleware
app.use(express.json({ extended: false }));
// init cors
app.use(cors());
app.get('/', (req, res) => res.send('приложение запущено'));
// define routes
app.use('/api/users', require('./routes/api/users'));
app.use('/api/auth', require('./routes/api/auth'));
app.use('/api/posts', require('./routes/api/posts'));
app.use('/api/profile', require('./routes/api/profile'));
const PORT = process.env.PORT || 8080;
app.listen(PORT, () => console.log(`сервер запущен, порт: ${PORT}`));
/api/auth.js
router.post(
'/',
[
check('email', 'пожалуйста, введите email').isEmail(),
check('password', 'пожалуйста, введите пароль').exists(),
],
async (req, res) => {
// валидация формы
const errors = validationResult(req);
if (!errors.isEmpty()) {
return res.status(400).json({ errors: errors.array() });
}
console.log('успешная валидация данных в форме');
const { email, password } = req.body;
console.log(
'получены: email — "' + email + '" и пароль — "' + password + '"'
);
try {
// проверка наличия пользователя
let user = await User.findOne({ email });
if (!user) {
return res
.status(400)
.json({ errors: [{ msg: 'неверные логин и/или пароль' }] });
}
// проверка пароля
const isMatch = await bcrypt.compare(password, user.password);
if (!isMatch) {
return res
.status(400)
.json({ errors: [{ msg: 'неверные логин и/или пароль' }] });
}
console.log('логин и пароль подходят');
// вебтокен
const payload = {
user: {
id: user.id,
},
};
jwt.sign(
payload,
config.get('jwtSecret'),
{ expiresIn: 360000 }, // поставить 3600 перед деплоем
(error, token) => {
if (error) throw error;
res.json({ token });
console.log('пользователю присвоен токен — ' + token);
}
);
} catch (error) {
console.error(error.message);
res.status(500).send('ошибка сервера');
}
}
);
首先我不明白当你用邮递员向你的后端发送请求时它是否工作正常 但在确定您将请求发送到正确的网址之后 第一步,尝试来自另一个浏览器的请求,如果邮递员工作正常,并且如果它适用于另一个浏览器,则搜索浏览器的特定问题 步骤 2 为什么您使用端口 8080 它是任何设备的默认端口 我不确定但它可能会导致一些问题 在最后一步尝试这个
app.use(cors({ origin : '*'}))
这意味着请求可以从任何地址发送到您的后端
我也被禁止403,当我检查时有
@UseGuards(UserAuthGuard) @ApiBearerAuth('JWT-auth')
确保您是否正在使用其中任何一个。
您收到
403
错误代码,这意味着未找到。您还发布了您的 /api/auth
路线,所以我假设您想发布到 auth,但是在这里:http://localhost:3000/api/users 403 (Forbidden)'
当您应该发布到 /api/users
时,您正在发布到 /api/auth
。
如果您尝试按照路径建议的方式向用户发布信息,那么我建议您查看您的
/api/users
路由并确保您配置了 POST 路由。否则,您将收到像现在这样的 403
错误。