2016-06-28 75 views
0

我使用角度来处理一些路由,在服务器端我使用护照,所以基本上我可以访问用户会话变量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路由器呈现页

+0

你有任何可以发布的代码吗?它会让它更容易:) :) – Olly

+0

嗨,Olly,我在我的文章中发布了一些代码 –

回答

0

我建议使用像JWT令牌一样的基于令牌的身份验证,你也有这些的护照插件。

如果你仍然想使用基于会话的信息并将其传递给客户端,可以将它们存储在一些全局JS变量中,我非常不推荐。

这里大约智威汤逊一些信息:https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

为当地人如果使用的车把它会是这个样子:

<script> 
    var user = {{user}}; 
</script> 

只是注意,您可能需要实现一些JSON字符串化和解码,以以JS对象的形式获取信息。