如何发现一些错误发送数据对后端有反应? [英] How find some error send data react to backend?

查看:61
本文介绍了如何发现一些错误发送数据对后端有反应?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I've seen in some videos that the username and password are sent via axios this is:

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 不能工作.这是后端:

I used cors when I got the password with the username. but there is a problem I can't fix or find it. passport.serilizeUser change User id two times. and req.user cannot work. This is backend:

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`);
});

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

when I send username and password I get console this:

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

我认为发送用户名和密码有误.请帮我!我5天都解决不了这个问题.

I think error with send username and password. Please help me! I can't solve this problem for 5 days.

推荐答案

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

req.login() establishes a login session. passport.authenticate() middleware invokes req.login() automatically. passport.serializeUser will be invoked from req.login().

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

Here both of them are being used. Only passport.authenticate() should be fine to create a session and authenticate it. Check the follows,

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

我在本地进行了检查并按您的预期工作!

I checked it in my local and works as you expected !!

这篇关于如何发现一些错误发送数据对后端有反应?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆