我的设置:
当我将App放在本地主机上时,一切都很好。但是既然我把它放在这些平台上,客户端的Cookie就不再设置了。
Server.js (托管于Heroku)
var express = require("express");
var bodyParser = require("body-parser");
var logger = require("morgan");
var methodOverride = require("method-override");
var cors = require("cors");
var cookieParser = require("cookie-parser");
var session = require("express-session");
var bcrypt = require("bcrypt-nodejs");
var appURL = "https://xxxxxxxxxxxxx.firebaseapp.com";
var app = express();
app.use(logger("dev"));
app.use(bodyParser.json());
app.use(methodOverride());
app.use(cors({origin: appURL, credentials: true, methods: "GET,POST"}));
app.use(cookieParser());
app.all('*', function(req, res, next) {
res.setHeader("Access-Control-Allow-Origin", appURL);
res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");
res.setHeader("Access-Control-Allow-Credentials", true);
next();
});
app.set("trust proxy",1);
app.use(session({
name: "random_session",
secret: "yryGGeugidx34otGDuSF5sD9R8g0Gü3r8",
resave: false,
saveUninitialized: true,
cookie: {
path: "/",
secure: true,
domain: ".firebaseapp.com",
httpOnly: true
}
}));Login.ts (我在firebase中提出请求的文件)
let data = {
email: this.loginField,
password: this.passwordField
}
var xhr = new XMLHttpRequest();
xhr.open("POST","https://xxxxxxxxxx.herokuapp.com/login", true);
xhr.withCredentials = true;
var change = () => {
if(xhr.readyState == XMLHttpRequest.DONE) {
if(xhr.status != 0) {
if (xhr.status != 401 && xhr.status != 404) {
//Login Successfull
} else {
//Login Fail
}
} else {
//Network error
}
}
}
xhr.onreadystatechange = change;
xhr.setRequestHeader("Access-Control-Allow-Origin","https://xxxxxxxxxx.firebaseapp.com");
xhr.setRequestHeader("Access-Control-Allow-Credentials", "true");
xhr.setRequestHeader("Content-Type", "application/json");
xhr.send(JSON.stringify(data));问题:
我为什么不在客户端设置一个曲奇呢?我是在Cookie中使用了错误的域,还是在访问控制允许来源中使用了错误的域?
谢谢!
发布于 2018-12-21 06:35:29
我解决了我的问题:我从Firebase和上删除了我的Ionic应用程序,现在我在Heroku上托管它,也是。这并没有解决问题。cookie仍未在我的浏览器中设置。
我现在的设置:
在我的Node.js中,我刚刚删除了域
app.use(session({
name: "random_session",
secret: "yryGGeugidx34otGDuSF5sD9R8g0Gü3r8",
resave: false,
saveUninitialized: true,
cookie: {
path: "/",
secure: true,
//domain: ".herokuapp.com", REMOVE THIS HELPED ME (I dont use a domain anymore)
httpOnly: true
}
}));删除域解决了我的问题。
iOS-故障排除:
如果您在Heroku上托管NodeJS服务器,在Heroku上也承载PWA,则需要在Settings中禁用 Prevent Cross-Site Tracking。
发布于 2021-03-03 17:46:56
对于我来说,在cookie对象中添加sameSite = 'none';有效。
https://stackoverflow.com/questions/53813544
复制相似问题