Ui-router AngularJS:如何访问会话变量'req.user'

时间:2016-06-28 13:22:58

标签: javascript node.js session express angular-ui-router

我正在使用angular来处理一些路由,在服务器端我使用的是护照所以基本上我可以在我的视图中访问用户会话变量req.user,但是当涉及到由ui渲染的路由时-router我的req.user未定义。任何想要访问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);
     })
     });

在我的渲染页面'employee / index'中我可以显示我的用户信息,但由ui-router呈现的路由没有用户变量

这是一个角度路线的示例代码:

    $stateProvider
    .state('home',{
        url:'/',
        templateUrl:'/views/employee/home.html'
    })
home.html中的

用户未定义哪个是正常的,因为它不是表达服务器的人。我想要的是在我的ui-router渲染页面中获取此用户变量

1 个答案:

答案 0 :(得分:0)

我建议使用JWT-tokens之类的东西实现基于令牌的身份验证,你也有这些的护照插件。

如果你仍然想使用基于会话的信息并将其传递给客户端,你可以将它们存储在一些全局JS变量中,我强烈建议不要这样做。

这里有一些关于jwt的信息:https://scotch.io/tutorials/authenticate-a-node-js-api-with-json-web-tokens

对于本地人来说,如果使用把手,它看起来像这样:

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

请注意,您可能需要实现一些JSON字符串化和解码,以便将信息作为JS对象。