req.session在定义之后在下一个POST请求中返回undefined

用户名

我正在使用Node.js制作的后端和Angular制作的前端。我使用express-sessions进行登录,首先,它返回正确的req.session.usuario但是在下一个用于检查用户是否登录的POST请求中,该请求返回undefined。

这是节点的app.js

var express = require('express');
var path = require('path');
var logger = require('morgan');
var cors = require('cors');
var session = require('express-session');
var cookieParser = require('cookie-parser');


var indexRouter = require('./routes/index');
var authRouter = require('./routes/auth');
var usersRouter = require('./routes/users');
var instructorRouter = require('./routes/instructor');

var app = express();


app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use(cookieParser());
app.use(cors( {
  credentials: true,
  origin: 'http://localhost:4200'
}));
app.use(session({
    secret: "Shh, es un secreto",
    resave: false,
    saveUninitialized: true
    
}))

app.use('/', indexRouter);
app.use('/auth', authRouter);
// app.use('/usuario', authMiddleware.estaLogueado ,usersRouter);
app.use('/usuario', usersRouter);
app.use('/instructor', instructorRouter);

...

module.exports = app;

这是我对auth.js中的路由的功能


router.post('/login', (req, res, next) => {
    const username = req.body.username.toLowerCase();
    Usuario.findOne({
        where: {
            username: username
        }
    }).then((usuario) =>{
        if (usuario) {
            bcrypt.compare(req.body.password, usuario.password, function(errp, result) {
                if(result){
                    req.session.usuario = usuario.id; // Saves the session
                    console.log("La sesion " + req.session.usuario);
                    res.json({username: usuario.username, color: usuario.color});
                } else {
                    next(new Error("Contraseña incorrecta"));
                }
            });
        }else{
            next(new Error("Usuario invalido"));
        }
    }, err => {
        next(new Error("Usuario invalido: " + err));
    });
});

这是我用来检查是否已登录的功能:

router.post('/logged', (req, res) => {
    console.log("intento: " + req.session.usuario) // here it shows undefined
    req.session.usuario ? res.json({loggedIn: true}) : res.json({loggedIn: false});
})

在Angular中,这是我使用的两个函数,第一个是登录名(有效),第二个是登录的,始终返回false:

login(user, pass)  {
    return this.http.post(server + '/auth/login', 
        {username: user, password: pass},
        {withCredentials: true}
    )
}

logged(){
    return this.http.post(server + '/auth/logged', {withCredentials: true})
}

在实际组件中,我这样做:

this.authservice.logged().subscribe( (data) => {
    this.loggedIn = data['loggedIn'];
    console.log(data['loggedIn']);
});

这里有什么问题?

用户名

我终于得到答案了!我一切正常,但第二个请求实际上不包括withCredentials json作为选项,它作为主体传递,因此我添加了空括号来模拟主体,现在它就像一个吊饰一样工作!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

POST请求中未定义req.session-SailsJS

来自分类Dev

Expressjs req.params undefined but req.req.params defined

来自分类Dev

护照中的req对象。

来自分类Dev

护照中的req对象。

来自分类Dev

Express Manipulating req对象传递给下一个中间件

来自分类Dev

当对象与get / post请求一起发送时,express为req.body返回一个空对象

来自分类Dev

req.session是不确定的?

来自分类Dev

ExpressJS:req是未定义的

来自分类Dev

Express中的req.header与req.headers

来自分类Dev

Express.js req.params未定义但req.req.params已定义

来自分类Dev

OpenSSL Windows:req中的错误

来自分类Dev

req参数返回一个空数组

来自分类Dev

req.body 总是返回为 undefined

来自分类Dev

req.params返回未定义

来自分类Dev

req.body 返回未定义?

来自分类Dev

发布请求中的req.flash问题

来自分类Dev

表达:POST请求后,req.body未定义

来自分类Dev

req.session未定义,req.session.user_id不起作用

来自分类Dev

在Express.js中未定义req.session

来自分类Dev

路线中的req.session未定义

来自分类Dev

req.session.passport为空:req.user未定义

来自分类Dev

req.session护照属性不保存

来自分类Dev

SailsJS:调用req.param()和req.file()时,POST请求无法正确解析

来自分类Dev

Express-req.ip返回127.0.0.1

来自分类Dev

护照req.isAuthenticated()总是返回fasle

来自分类Dev

Express req.query.time返回NaN

来自分类Dev

req.body.stripeToken未定义

来自分类Dev

获取req.param未定义

来自分类Dev

req.headers.origin未定义