我使用React.js和Express.js作为网络服务器制作了我的webapp。 React在package.json中连接到Express(现在):
const cookieSession = require('cookie-session');
在我的Express服务器中,我用它来处理会话:
app.use(cookieSession({
name: 'parse-session',
secret: "SECRET_SIGNING_KEY",
maxAge: 15724800000
}));
和此:
return new Promise((resolve,reject)=>{
if(req.session.token){
console.log(req.session.token);
request({
uri:'http://myserver.herokuapp.com/parse/users/me',
headers: {
'X-Parse-Application-Id': 'my-app-id',
'X-Parse-Session-Token': req.session.token
},
json:true
}).then((userData) => {
if(userData){
resolve(userData);
}
}).catch((error) => {
reject(error);
});
}
所以当我使用登录到我的API时,它运行正常,这是检查currentUser是否存在的代码:
fetch('/user',{credentials:'include'})
.then((response)=>{
return response.json();
})
.then((body)=>{
if(body.user){
this.setState({logIn:true});
}
}).catch((error)=>{
console.log('My error:',error);
});
并且它可以正常工作,在React中调用:
axios.post('/logout').then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err);
});
问题是当我尝试注销时:我在React上执行此操作:
app.post('/logout',(req,res)=>{
if(req.session){
req.session.destroy((error)=>{
if(error){
console.log(error);
}
});
}
});
这是在Express上注销:
TypeError: req.session.destroy is not a function
给我这个错误信息:
req.session = null
为什么呢?我已经看到destroy()是一个函数。我也尝试过:{{1}}但是,当你在承诺之后打电话来检查会话是否存在时,它当前还活着。
为什么呢?我怎么用来解决它?
由于
答案 0 :(得分:7)
req.session.destroy
是您使用express-session
npm模块时要使用的调用。但是,您使用的cookie-session
在当前版本中未定义req.session.destroy
,导致您收到错误。
要在使用cookie-session
时销毁会话,只需将其设置为null:req.session = null
。如果您决定使用express-session
,那么req.session.destroy
就可以了。
参考: