AngularJS和ExpressJS会话管理?

nir*_*ran 7 node.js express angularjs

我想在所有页面上保持会话.对于这个项目,我使用expressJs,nodeJS作为服务器端.AngularJS在前端.

我不确定,如何在视图更改或网址更改时处理会话.因为我需要照顾expressJS路由器或angularJs路由器.

我应该遵循什么方法?

angularJS路由器

     myApp.config(['$routeProvider', function($routeProvider) {

    $routeProvider.when('/welcome', {templateUrl: 'partials/welcome.html', controller: 'MyCtrl2'});
    $routeProvider.when('/login', {templateUrl: 'partials/login.html', controller: 'MyCtrl2'});
    $routeProvider.when('/signup', {templateUrl: 'partials/signup.html', controller: 'singupController'});
    $routeProvider.otherwise({redirectTo: '/'});
  }]);
Run Code Online (Sandbox Code Playgroud)

注册控制器

myApp.controller('singupController',function($scope,$rootScope,$http){

    $scope.doSingnup = function() {

       var formData = {
          'username' : this.username,
          'password' : this.password,
           'email' : null
      };

      var jdata = JSON.stringify(formData);

      $http({method:'POST',url:'/signup',data:jdata})
      .success(function(data,status,headers,config){

                console.log(data);

      }).
      error(function(data,status,headers,config){

        console.log(data)

      });
    }
  })
Run Code Online (Sandbox Code Playgroud)

ExpressJS路由器

    module.exports = exports = function(app, db) {

    var sessionHandler = new SessionHandler(db);
    var contentHandler = new ContentHandler(db);

    // Middleware to see if a user is logged in
    app.use(sessionHandler.isLoggedInMiddleware);

    app.get('/', contentHandler.displayMainPage);

    app.post('/login', sessionHandler.handleLoginRequest);

    app.get('/logout', sessionHandler.displayLogoutPage);

    app.get("/welcome", sessionHandler.displayWelcomePage);

    app.post('/signup', sessionHandler.handleSignup);

    app.get('*', contentHandler.displayMainPage);

    // Error handling middleware
    app.use(ErrorHandler);
}
Run Code Online (Sandbox Code Playgroud)

注册后,我想重定向到登录页面.我怎么能在上面的路由器中做到这一点.我应该使用以下哪一项来更改应用程序的视图
1)$的位置angularJS
2)ExpressJS的重定向

alk*_*ows 8

所以我有同样的问题,并且公平地说,我可能已经阅读了我不记得的地方.

问题:Angular构建单页应用程序.刷新后,您将放宽范围并使用经过身份验证的用户.

途径

AngularJS模块提供了一个名为run的启动函数,该函数在加载页面时始终调用.非常适合刷新/重新加载.

myApp.run(function ($rootScope, $location, myFactory) {
    $http.get('/confirm-login')
        .success(function (user) {
            if (user && user.userId) {
                $rootScope.user = user;
            }
        });
}
Run Code Online (Sandbox Code Playgroud)

express-session为您保存会话,并使用您的浏览器发送的sessionId对您进行身份验证.所以它总是知道你是否经过身份验证.

router.get('/confirm-login', function (req, res) {
        res.send(req.user)
    }
);
Run Code Online (Sandbox Code Playgroud)

我只需要刷新并加载所有依赖项后,询问我是否经过身份验证并设置$ rootScope.user = authenticatedUserFromExpress;


Box*_*cks 7

这里有两个不同的概念 - 服务器端会话状态和Angular中客户端的用户状态.在express中,您可以通过req.session使用会话来管理基于会话的数据.

在角度方面,控制器中只有范围.如果要跟踪多个控制器中的某些数据,则需要创建一个服务来存储数据并将服务注入所需的控制器.

典型的生命周期是首先检查服务中是否已存在数据,如果是,则使用它.如果没有,请等待(由用户或应用程序或其他任何方式)填充数据,然后检测这些更改并与您的服务同步.