Как перенаправить на другую страницу после входа в react

#node.js #reactjs #express #cors

Вопрос:

Чтобы описать мою проблему: есть страница реакции, на которой пользователь заполняет электронную почту и отправляет ее в экспресс — службу с помощью Axios.post-эта часть работает. Но затем я хочу, чтобы пользователь был перенаправлен на страницу регистрации (/регистрация) после неправильного входа в систему. Я использовал res.перенаправление(«http://localhost:3000/registration»), но он снова и снова выдает одну и ту же ошибку.

Ошибка

Ответ на предполетный запрос не проходит проверку контроля доступа: заголовок ‘Access-Control-Allow-Origin’ имеет значение ‘http://localhost:3000″ это не равно поставляемому источнику.

user.js файл

  //Authenticate user
    router.post("/auth", async (req, res) => {

        const pass = req.body.pass
        const email = req.body.email

        //Same as SELECT command
        await User.findOne({
            where: {
                email: email
            } 
        }).then(function (user) {
            if(!user) {
                res.redirect("http://localhost:3000/registration")
            } else {
                bcrypt.compare(pass, user.pass, function (err, result) {
                    if (result == true) {
                        console.log("Logged in")
                        res.send({
                            token: "123123"
                        })
                    } else {
                        res.redirect('/')
                    }
                })
            }
        })
    })
 

index.js файл

 const express = require('express')
const cors = require('cors')
const app = express()
const db = require('./models/index')

app.use(express.urlencoded({extended: true}))
app.use(express.json())

app.use(cors())

db.sequelize.sync({ force: true }).then(() => {
    console.log("Drop and re-sync db.");
  });

app.get("/", (req, res) => {
    //res.json({message: "WELCOME"})
    res.redirect("http://localhost:3000/")
})


require("./routes/user")(app)
require("./routes/category")(app)
require("./routes/product")(app)

app.listen(3001, () => {
    console.log("running on port 3001")
}) 
 

Ответ №1:

При сбое входа перенаправление с использованием this.props.history.push('/registration') компонента на основе классов в React.

Изменить: Если вы используете компонент на основе функций, то

 import { useHistory } from "react-router-dom";
let history = useHistory();
 

перенаправление с помощью history.push('/registration')

Комментарии:

1. Проблема в том, что я использую компонент на основе функций для страницы входа в систему, потому что я работаю с useState.

Ответ №2:

Нашел его!

 window.location.replace("some location")
 

или

 window.location = "some location"