Javascript 使用express获取post请求后,会话未保存
我用fetch发出post请求,并将令牌保存到express api后端的会话中。但是,即使我在fetch中将Javascript 使用express获取post请求后,会话未保存,javascript,session,express,cookies,Javascript,Session,Express,Cookies,我用fetch发出post请求,并将令牌保存到express api后端的会话中。但是,即使我在fetch中将凭证设置为include,令牌也不会保存在会话中。谁能帮我找出这个问题吗?谢谢 正在向api服务器发送令牌: fetch('http://localhost:3000/api/users', { method: 'post', headers: { 'Accept': 'application/json', 'Content-Type': 'ap
凭证设置为include
,令牌也不会保存在会话中。谁能帮我找出这个问题吗?谢谢
正在向api服务器发送令牌:
fetch('http://localhost:3000/api/users', {
method: 'post',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
credentials: 'include',
body: JSON.stringify({
accessToken: user.accessToken,
})
})
.then(res => res.json())
.then(json => {
console.log(json);
})
.catch(error => {
console.log(error);
});
服务器端:
app.use(morgan('dev'))
app.use(cors({credentials: true}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(session({secret: 'ssshhhhh', resave: true, saveUninitialized: true}));
app.post('/api/users', function(req, res) {
if (!req.session.accessToken) {
req.session.accessToken = req.body.accessToken;
}
...
...
})
app.get('/api/users/token', function(req, res) {
console.log(req.session);
if (req.session.accessToken) {
return res.json({ accessToken: req.session.accessToken });
}
return res.json({ accessToken: null });
})
正在从会话检索令牌:
fetch('http://localhost:3000/api/users/token', {
credentials: 'include'
})
.then(checkStatus)
.then(response => {
return response.json();
})
.then(json => {
console.log(json);
})
.catch(err => {
console.error(err);
});
编辑:
这是来自请求的标题:
{ host: 'localhost:3000',
accept: '*/*',
'if-none-match': 'W/"4d-oW2yTGBOs6aaA4LAPgNxNQ"',
cookie: 'connect.sid=s%3AHXDL6Az0hRZeSGsJgjhw4kvVONBLz-yn.sOOAqbxaLQ6Z%2FfCdfGOmXf9XsYl3JdHvP%2FmfkUln1xA',
'user-agent': 'cairn/1 CFNetwork/758.2.8 Darwin/15.3.0',
'accept-language': 'en-us',
'accept-encoding': 'gzip, deflate',
connection: 'keep-alive' }
Session {
cookie:
{ path: '/',
_expires: null,
originalMaxAge: null,
httpOnly: false } }
GET /api/users/token 304 23.780 ms - -
{ host: 'localhost:3000',
'content-type': 'application/json',
cookie: 'connect.sid=s%3A1jat379BSZQCKvJV1pKL4_Cub9ApMFVI.m%2BQHkIewMl9Uzjg315GTC5aD5qpWESiQVNDnXrFFSbQ',
connection: 'keep-alive',
'if-none-match': 'W/"270-toaMUba3dhoaPENGp5EGaA"',
accept: 'application/json',
'accept-language': 'en-us',
'content-length': '484',
'accept-encoding': 'gzip, deflate',
'user-agent': 'cairn/1 CFNetwork/758.2.8 Darwin/15.3.0' }
如果使用浏览器调用这些服务器端终结点会发生什么情况?@Leventix我会得到相同的结果。请尝试删除cookieParser
中间件,或者将其与会话
赋予相同的机密。如果不起作用,请尝试console.log
记录每个请求的请求头和请求体。也许你的饼干不是由client@jwags我认为问题来自客户的要求。我可以通过在浏览器中点击端点来保存会话。我认为cookie解析器可能需要在前面使用app.use()。这可能是因为cors可能需要cookies。