我使用角度来处理一些路由,在服务器端我使用护照,所以基本上我可以访问用户会话变量req .user在我的意见,但是当涉及到由路由器渲染的路由我的req.user是未定义的。任何想法进入到req.user即使它不是一个明确的路线Ui路由器AngularJS:如何访问会话变量'req.user'
app.js代码:
// Express Session
app.use(session({
secret: 'secret',
saveUninitialized: true,
resave: true
}));
// Passport init
app.use(passport.initialize());
app.use(passport.session());
// Global Vars
app.use(function (req, res, next) {
res.locals.success_msg = req.flash('success_msg');
res.locals.error_msg = req.flash('error_msg');
res.locals.error = req.flash('error');
res.locals.user = req.user || null;
next();
});
我的护照代码如下:
passport.use('employee',new LocalStrategy(
function(email, password, done) {
Employee.getUserByEmail(email, function(errEmp, emp){
if(errEmp) throw errEmp;
if(!emp){
return done(null, false, {message: 'Unknown User'});
}
if(emp) {
Employee.comparePassword(password, emp.encryptedpass, function (err, isMatch) {
if (err) throw err;
if (isMatch) {
return done(null, emp);
} else {
return done(null, false, {message: 'Invalid password'});
}
});
}
});
}
));
router.get('/',ensureAuthenticated ,function(req, res, next) {
res.render('index', { title: 'Nubes' });
});
function ensureAuthenticated(req, res, next){
if(req.isAuthenticated()){
Employee.findById(req.user.id,function (err,emp) {
if(emp) {
res.render('employee/index');
}
})
}
}
router.post('/login', function(req, res, next) {
Employee.findOne({email:req.body.username},function (err,emp) {
if(emp){
passport.authenticate('employee', function(err, user, info) {
if (err) { return next(err); }
if (!user) { return res.redirect('/'); }
req.logIn(user, function(err) {
if (err) { return next(err); }
return res.redirect('/');
});
})(req, res, next);
})
});
在我呈现的页面“员工/索引'我可以显示我的用户信息,但路由通过UI路由器呈现没有用户变量
这里是角路由的示例代码:
$stateProvider
.state('home',{
url:'/',
templateUrl:'/views/employee/home.html'
})
在home.html用户没有定义这是正常的,因为它不是表达服务器的人。我想要的是得到这个用户变量在我的UI路由器呈现页
你有任何可以发布的代码吗?它会让它更容易:) :) – Olly
嗨,Olly,我在我的文章中发布了一些代码 –