登录保留在Postman中,但不能保留在具有Angular的浏览器中

时间:2019-01-30 13:50:05

标签: node.js angular cookies postman

我在node.js上有一个Express的API。该API将用户登录。我使用passsport对其进行身份验证。

我有两条路线:/登录和/公司。首先,用户必须登录系统,他收到令牌,然后我登录。此后,他/她必须访问路线/公司,但是必须登录。

要验证用户是否已登录,我使用req.user。这是在路线/公司上进行用户登录验证的代码:

exports.list = function (req, res, next) {

console.log(req.user);

if (!req.user) {
    return res.status(404).send("Precisa estar logado.");
}
...

这是我的服务器设置:

app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());
app.set('trust proxy', 1) // trust first proxy
app.use(session({
    secret: 'MotomcoGroupAjm999MOTOMCO',
    resave: false,
    saveUninitialized: true,
    cookie: { httpOnly: false }
}))

// Flash - Gerenciador de mensagens de resposta do servidor.
app.use(flash());
app.use(pass.initialize());
app.use(pass.session());

使用Postman进行测试时,我可以毫无问题地访问/公司,但是尝试登录后通过浏览器访问我属于 (!req.user)

这是饼干的问题吗?当使用Angular向服务器发出请求时,我尝试使用withCredentials,但是没有成功。

问题:当我使用Angular进行测试时,为什么使用Postman将会话写入测试,但没有记录在浏览器中?我忘了在客户端做什么?

1 个答案:

答案 0 :(得分:0)

问题出在CORS。这是我为解决问题所做的:

var cors = require('cors');
app.use(cors({origin:true,credentials: true}));

然后,设置标题:

app.use(function (req, res, next) {
    res.header('Access-Control-Allow-Credentials', true);
    res.header('Access-Control-Allow-Origin', req.headers.origin);
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
    res.header('Access-Control-Allow-Headers', 'Origin, Accept, Accept-Version, Content-Length, Content-MD5, Content-Type, Date, X-Api-Version, X-Response-Time, X-PINGOTHER, X-CSRF-Token,Authorization');
    if (req.method === "OPTIONS") {
        return res.status(200).end();
    } else {
        next();
    }
});