gpt4 book ai didi

javascript - 无法在 Heroku 中仅通过 https 访问 http 上的 cookie

转载 作者:行者123 更新时间:2023-12-03 07:31:53 26 4
gpt4 key购买 nike

我的 Node 应用程序中的 cookie 遇到了一个奇怪的问题。它托管在 Heroku 上,我使用存储在 cookie 中的 JSON Web token ,该 cookie 由我的 Express 中间件进行身份验证。当我登录 Macbook pro 时,cookie 已成功存储。但是,当我使用 Linux Mint 桌面或 Android 平板电脑时,站点会登录,但随后会在 protected 路由上重定向,并且永远不会设置 cookie。

这是登录时设置 cookie 的位置:

let token = jwt.sign({
username: user.username,
email: user.email
}, config.privateKey, {
expiresIn: '7d'
});
let userResponse = {
success: true,
message: 'Successfully logged in!',
id: user._id,
email: user.email,
username: user.username
}
// set cookie for 7 days
res.cookie('auth_token',
token,
{maxAge: 604800000, path: "/"}).json(userResponse);

这是我的 server.js 文件:

'use strict';

const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const env = process.env.NODE_ENV || "development";
const mongoose = require('mongoose');
const cookieParser = require('cookie-parser');
const config = require('./app/config/config.js');
process.env.PWD = process.cwd();

// Establish connection with MongoDB
mongoose.connect(config.db.connectString);

app.use(cookieParser());

// Allowing X-domain request
var allowCrossDomain = function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Cache-Control");

// intercept OPTIONS method
if ('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
};
app.use(allowCrossDomain);

app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(express.static('public'));

const db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error: '));
db.once('open', () => {
console.log('Connected to sondage database');
});

// ===== Import Routers ======
const userRouter = require('./app/routes/user.routes')(express, app);
const pollRouter = require('./app/routes/poll.routes')(express, app);
const authRouter = require('./app/routes/auth.routes')(express, app);
app.use('/api/users', userRouter);
app.use('/api/polls', pollRouter);
app.use('/api/', authRouter);

// For all other requests, use React Router
app.get('*', function (request, response){
response.sendFile(process.env.PWD + '/public/index.html');
});

app.listen(process.env.PORT || 3000, () => {
console.log('Server running');
});

编辑我已将其追溯到 http 与 https 问题。如果我在请求中使用 https,cookie 就会起作用。否则不会设置 cookie。所以我需要一种方法来强制用户使用HTTPS。

最佳答案

我能够使用 heroku-ssl-redirect Node 包修复此问题。这会接受请求并强制浏览器对每个请求使用 https。

关于javascript - 无法在 Heroku 中仅通过 https 访问 http 上的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35784235/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com