【发布时间】:2020-11-15 22:55:05
【问题描述】:
我在 nodejs 的帮助下创建了一个网络应用程序。我正在使用 sequelize 作为 mysql 的 ORM。 现在我已经在表达式会话的帮助下实现了登录功能。但是,每当我尝试在不同的路由中访问时,loggedIn 参数都会返回 undefined。
我的 AppJs 文件:
const path=require('path');
const express=require('express');
const app=express();
const bodyParser = require('body-parser');
const session= require('express-session');
const sequelize= require('./util/database');
var SequelizeStore = require('connect-session-sequelize')(session.Store);
const myStore=new SequelizeStore({
db: sequelize,
})
app.use(session({secret:'my secret', store:myStore ,resave:false,saveUninitialized:false}))
app.set('view engine','ejs');
app.set('views', 'views');
const movieroutes=require('./routes/movies');
const personroutes=require('./routes/persons');
const testroutes=require('./routes/test');
const authroutes=require('./routes/auth');
const Movie= require('./models/movie');
const Moviegenre=require('./models/moviegenre');
const Person=require('./models/person');
const Personrole=require('./models/personrole');
const Personmovierole=require('./models/personmovierole');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(express.static(path.join(__dirname, 'public')));
app.use("/",movieroutes);
app.use("/",personroutes);
app.use("/",testroutes);
app.use("/",authroutes);
var port=3000||process.env.PORT
app.listen(port,function(){
console.log("the server has started");
})
app.use("/",function(req,res){
res.sendFile(path.join(__dirname,'./','views','home.html'));
})
Person.belongsToMany(Movie,{through:Personmovierole,unique:false});
Movie.belongsToMany(Person,{through:Personmovierole,unique:false});
Person.belongsToMany(Personrole,{through:Personmovierole,unique:false});
Personrole.belongsToMany(Person,{through:Personmovierole,unique:false});
Movie.belongsToMany(Personrole,{through:Personmovierole,unique:false});
Personrole.belongsToMany(Movie,{through:Personmovierole,unique:false});
myStore.sync();
sequelize.
sync().
then(result=>{
console.log(`sync done`);
})
.catch(err=>{
console.log(err);
})
我的身份验证控制器:
exports.getLogin= (req,res,next)=>
{
res.render('auth/login',{
isAuthenticated:false
})
}
exports.postLogin= (req,res,next)=>
{
req.session.isLoggedIn=true;
console.log(req.session.isLoggedIn);
req.session.save(err=>{
console.log(err);
res.redirect('/');
})
}
exports.postLogout= (req,res,next)=>
{
req.session.destroy(err=> {
console.log(err);
res.redirect('/');
});
}
我的电影控制器:
exports.getAllMovies=(req,res,next)=>{
Movie.findAll()
.then(movies=>{
console.log(req.session);
console.log(req.session.IsLoggedIn);
res.render('movies',{
movies:movies,
isAuthenticated:req.session.IsLoggedIn
});
})
.catch(err=>{
console.log(err);
});
};
正如您在影片控制器中看到的那样。我插入了两个 console.log 值。
console.log(req.session) 返回:
Session { cookie: { path: '/', _expires:null,originalMaxAge:null,httpOnly: true }, isLoggedIn: true}
但是console.log(req.session.IsLoggedIn) 返回:
undefined
请帮忙
【问题讨论】:
标签: javascript node.js express session sequelize.js