如何解决使用firestore-store和express-session在每次调用时创建新的Cookie,而不是检索现有的Cookie
我正在将firestore-store
与express-session
一起使用,以存储用于oauth进程的cookie。我将会话添加为express
实例上的中间件层。但是我注意到在每次函数调用时都会生成并存储一个新的cookie,而不是读取和更新一个cookie。
也许我误解了这一切应该如何工作:难道不应该只有一个cookie吗?如果每次调用都创建一个新的cookie,那么在以后的调用中如何从cookie中正确检索信息?
我目前正在终端上通过firebase serve --only functions
运行此程序,并正在运行本地实例。除了将会话存储在生产Firebase上之外,我没有仿真任何东西。
这是我的设置:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const express = require("express");
const app = express();
const session = require('express-session')
const FirestoreStore = require('firestore-store')(session);
admin.initializeApp({
credential: admin.credential.cert(<json>),databaseURL: 'https://<appUrl>.firebaseio.com'
});
app.set('trust proxy',true)
app.use(cors())
app.use(session({
store: new FirestoreStore({
database: admin.firestore(),}),secret: 'My secret',name: '__session',resave: true,saveUninitialized: true,cookie: {maxAge: 60000,secure: false,httpOnly: false}
}))
var client = etsyjs.client({
key: process.env.ETSY_KEY,secret: process.env.ESTY_SECRET,callbackURL: `http://localhost:5000/${process.env.BACKEND_ADDRESS}/authorize`
});
// Etsy oauth
app.get('/register',(req,res) => {
res.setHeader('Cache-Control','private');
return client.requestToken((err,response) => {
console.log(response)
if (err) {
return console.log(err);
}
req.session.cookie.token = response.token;
req.session.cookie.sec = response.tokenSecret;
res.status('200').send(response)
});
});
app.get('/authorize',res) => {
console.log(req.session) // does not include any information from the registration
...
}
我可以找到存储在Cloud Firestore上的信息,但是我注意到没有存储会话名称('__session')。这是否表明其他功能无法正常工作?
以下是示例文档:
session: {"cookie":{"originalMaxAge":60000,"expires":"2020-08-26T20:10:04.337Z","secure":false,"httpOnly":false,"path":"/"}}
解决方法
好的,现在一切正常。有一些使它起作用的东西。
- 我在后端调用中包括了凭据,因此现在看起来像这样:
return await fetch(url,{
method: 'GET',headers: {
'Content-Type': 'application/json',},credentials: 'include',}).then(...)
- 我将证书添加到cors设置服务器端。所以现在看起来像这样:
var corsOptions = {
credentials: true,origin: true
}
app.use(cors(corsOptions))
- 这些仍未完全解决问题。最终解决问题的是我从浏览器中清除了缓存。我相信这是真正解决问题的东西!尝试这个简单的事情花了多长时间绝对令人痛苦。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。