因此,我React前端位于http://localhost:3000/上,Express后端位于http://localhost:8080/上
当我尝试提交注册表时,chrome控制台返回错误:* 'POST http://localhost:3000/api/users 403(Forbidden)'*
我在这里做了一些关于堆栈的研究,发现我应该使用cors
,但所有确切的建议都没有帮助
(如果整个问题实际上很简单,我真的很抱歉,如果这有什么区别的话,这是我第一个同时使用React和Express的项目)
所以如果有人能告诉我我到底漏掉了哪些代码行,我应该把它放在哪里,我会很高兴的
另外,我已经用Postman测试过了,服务器端一切正常
下面是我后端:
server.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('ошибка сервера');
}
}
);
3条答案
按热度按时间nkcskrwz1#
首先我没有我不明白,当您发送请求与 Postman 到您的后端,它是工作正常与否,但在确定您发送请求到正确的网址后,在第一步尝试从另一个浏览器的请求,如果 Postman 工作正常,如果它与另一个浏览器搜索特定的问题与浏览器第2步为什么你使用端口8080其任何设备默认端口iam不当然,但它可能会导致一些问题,并在最后一步尝试这个
app.use(cors({ origin : '*'}))
这意味着请求可以发送到您的后端从任何地址w8rqjzmb2#
我也得到了禁止403,当我检查有
@UseGuards(UserAuthGuard) @ApiBearerAuth('JWT-auth')
请确保您是否正在使用其中的任何一个。
k4ymrczo3#
你得到一个
403
错误代码,这意味着没有找到。你也发布了你的/api/auth
路由,所以我假设你想发布到auth,但在这里:http://localhost:3000/api/users 403 (Forbidden)'
您发布到/api/users
时,您应该发布到/api/auth
。如果你正试图像你的路径所建议的那样向用户发布,那么我建议你看看你的
/api/users
路由,并确保你配置了一个POST路由。否则,您将收到一个403
错误,就像您现在收到的一样。