Jon*_*han 0 heroku node.js firebase ionic-framework express-session
当我的本地主机上有应用程序和服务器时,一切工作正常。但由于我将其托管在这些平台上,因此不再设置客户端 Cookie。
\n\nServer.js(托管在 Heroku)
\n\nvar express = require("express");\nvar bodyParser = require("body-parser");\nvar logger = require("morgan");\nvar methodOverride = require("method-override");\nvar cors = require("cors");\nvar cookieParser = require("cookie-parser");\nvar session = require("express-session");\nvar bcrypt = require("bcrypt-nodejs");\n\nvar appURL = "https://xxxxxxxxxxxxx.firebaseapp.com";\n\nvar app = express();\napp.use(logger("dev"));\napp.use(bodyParser.json());\napp.use(methodOverride());\n\napp.use(cors({origin: appURL, credentials: true, methods: "GET,POST"}));\napp.use(cookieParser());\n\napp.all(\'*\', function(req, res, next) {\n\n res.setHeader("Access-Control-Allow-Origin", appURL);\n res.setHeader("Access-Control-Allow-Headers", "X-Requested-With");\n res.setHeader("Access-Control-Allow-Credentials", true);\n next();\n});\n\napp.set("trust proxy",1);\n\napp.use(session({\n name: "random_session",\n secret: "yryGGeugidx34otGDuSF5sD9R8g0G\xc3\xbc3r8",\n resave: false,\n saveUninitialized: true,\n cookie: {\n path: "/",\n secure: true,\n domain: ".firebaseapp.com",\n httpOnly: true\n }\n}));\nRun Code Online (Sandbox Code Playgroud)\n\n登录.ts(我在 firebase 应用程序中发出请求的文件)
\n\n let data = {\n email: this.loginField,\n password: this.passwordField\n }\n\n var xhr = new XMLHttpRequest();\n xhr.open("POST","https://xxxxxxxxxx.herokuapp.com/login", true);\n xhr.withCredentials = true;\n\n var change = () => {\n if(xhr.readyState == XMLHttpRequest.DONE) {\n\n if(xhr.status != 0) {\n\n if (xhr.status != 401 && xhr.status != 404) {\n\n //Login Successfull\n\n } else {\n //Login Fail\n }\n\n } else {\n //Network error\n }\n\n }\n }\n\n xhr.onreadystatechange = change;\n\n xhr.setRequestHeader("Access-Control-Allow-Origin","https://xxxxxxxxxx.firebaseapp.com");\n xhr.setRequestHeader("Access-Control-Allow-Credentials", "true");\n xhr.setRequestHeader("Content-Type", "application/json");\n\n xhr.send(JSON.stringify(data));\nRun Code Online (Sandbox Code Playgroud)\n\n我做错了什么,它没有在客户端设置 cookie?我是否在 Cookie 中使用了错误的域或在 Access-Control-Allow-Origin 中使用了错误的域?
\n\n谢谢你!
\n我解决了我的问题:我从 Firebase 中删除了我的 Ionic 应用程序并且现在我也将其托管在 Heroku 上。这并没有解决问题。我的浏览器中仍未设置 cookie。
\n\n在我的Node.js“我刚刚删除了域”中:
app.use(session({\n name: "random_session",\n secret: "yryGGeugidx34otGDuSF5sD9R8g0G\xc3\xbc3r8",\n resave: false,\n saveUninitialized: true,\n cookie: {\n path: "/",\n secure: true,\n //domain: ".herokuapp.com", REMOVE THIS HELPED ME (I dont use a domain anymore)\n httpOnly: true\n }\n}));\nRun Code Online (Sandbox Code Playgroud)\n\n删除域名解决了我的问题。
\n\n如果您在 Heroku 上托管 NodeJS 服务器并且也在 Heroku 上托管 PWA,则需要禁用 Prevent Cross-Site Tracking在 Safari 设置中
| 归档时间: |
|
| 查看次数: |
5333 次 |
| 最近记录: |