如何发现一些错误发送数据对后端做出反应?

How find some error send data react to backend?

我在一些视频中看到用户名和密码是通过axios发送的 这是:

const user_Login = (email, password) => async (dispatch) =>{
    dispatch({ type: USER_LOGIN_REQUEST });
    try {
        const {data} = await axios( {
            method: "POST",
            data: {
                username: email,
                password: password
            },
            withCredentials: true,
            url: "http://localhost:3001/login"
        });  
        dispatch({ type: USER_LOGIN_SUCCESS, payload: data });
    } catch (error) {
        dispatch({type: USER_LOGIN_FAIL, error: error.message});
    }
}

我用用户名获取密码的时候用的是cors。但有一个问题我无法修复或找到它。 passport.serilizeUser 更改用户 ID 两次。 req.user 无法工作。 这是后端:

const express = require('express');
const mongoose = require('mongoose');
const cors = require('cors');
const bodyParser = require('body-parser');
const passport = require('passport');
const LocalStrategy = require('passport-local');
const passportLocalMongoose = require('passport-local-mongoose');
const session = require('express-session');


const app = express();

app.use(cors({
    origin: "http://localhost:3000",
    credentials: true
}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended:true}));


app.use(session({
    secret: "Our little secret.",
    resave: false,
    saveUninitialized: false
}));

app.use(passport.initialize());
app.use(passport.session());

mongoose.connect(
'mongodb://localhost:27017/testdb'
    , {
  useNewUrlParser: true,
  useCreateIndex: true,
  useUnifiedTopology: true
});

const shema = new mongoose.Schema({
    username: String,
    password: String
});
shema.plugin(passportLocalMongoose);

const User = mongoose.model("users", shema);
// User.plugin( passportLocalMongoose );


passport.use(User.createStrategy());

passport.serializeUser(function(user, done) {
    console.log("serilizeUser:", user.id);
    
    done(null, user.id);

    
});

passport.deserializeUser(function(id, done) {
  console.log("deserlizeUser: ", id);
    User.findById(id, function(err, user) {
    done(err, user);
  });
});

app.post('/register', (req, res) => {
    console.log(req.body);
    User.register( {username: req.body.username}, req.body.password, (err,user)=>{
        if(err){
            console.log(err);
        }
        else{
            res.send("User successfully registered!");
        }
    });
});
app.get('/', (req, res) => {
    res.send(req.user);
});
app.post('/login', function(req, res){
    
    const _user = new User({
        username: req.body.username,
        password: req.body.password
    });

    req.login( _user, function(err){
        if(err){
            console.log(err);
        }
        else{
            console.log("inside: ", req.user.id);
            passport.authenticate("local")(req,res,function(){
                console.log("ok!");
            })
        }
    } );
    res.send(req.user.id);
});

app.get('/', (req, res) => {
    res.send(req.user);
});

app.listen(3001, () => {
    console.log(`Server started on port 3001`);
});

当我发送用户名和密码时,我得到控制台:

serilizeUser: 607959e213f2692264c31c3b
inside:  607959e213f2692264c31c3b
serilizeUser: 60794a8736e1df1dfc16c37c
ok!

我认为发送用户名和密码时出错。请帮我! 我5天都解决不了这个问题

req.login() 建立登录会话。 passport.authenticate() 中间件自动调用 req.login()passport.serializeUser 将从 req.login() 调用。

这里两个都在用。只有 passport.authenticate() 应该可以创建会话并对其进行身份验证。检查以下内容,

app.post("/login", function (req, res) {
  passport.authenticate("local")(req, res, function () {
    console.log("ok!");
    res.send(req.user.id);
  });
});

我在我的本地检查过它并且按你预期的那样工作!!