我使用角度來處理一些路由,在服務器端我使用護照,所以基本上我可以訪問用戶會話變量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,我在我的文章中發佈了一些代碼 –