NodeJS 403 Forbidden on POST API

esbemjvw  于 2023-05-22  发布在  Node.js
关注(0)|答案(3)|浏览(162)

因此,我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('ошибка сервера');
    }
  }
);
nkcskrwz

nkcskrwz1#

首先我没有我不明白,当您发送请求与 Postman 到您的后端,它是工作正常与否,但在确定您发送请求到正确的网址后,在第一步尝试从另一个浏览器的请求,如果 Postman 工作正常,如果它与另一个浏览器搜索特定的问题与浏览器第2步为什么你使用端口8080其任何设备默认端口iam不当然,但它可能会导致一些问题,并在最后一步尝试这个app.use(cors({ origin : '*'}))这意味着请求可以发送到您的后端从任何地址

w8rqjzmb

w8rqjzmb2#

我也得到了禁止403,当我检查有@UseGuards(UserAuthGuard) @ApiBearerAuth('JWT-auth')
请确保您是否正在使用其中的任何一个。

k4ymrczo

k4ymrczo3#

你得到一个403错误代码,这意味着没有找到。你也发布了你的/api/auth路由,所以我假设你想发布到auth,但在这里:http://localhost:3000/api/users 403 (Forbidden)'您发布到/api/users时,您应该发布到/api/auth
如果你正试图像你的路径所建议的那样向用户发布,那么我建议你看看你的/api/users路由,并确保你配置了一个POST路由。否则,您将收到一个403错误,就像您现在收到的一样。

相关问题