【问题标题】:How to redirect expired users with passport.js and Angular?如何使用 passport.js 和 Angular 重定向过期用户?
【发布时间】:2014-11-29 03:25:29
【问题描述】:

一点背景:

  • 我正在使用 Passport.js 从服务器端处理登录。
  • Angular 路由用于单页应用的客户端

问题:

在我的服务器路由器中,我有确保用户在请求某些内容时登录的中间件,即:

function isLoggedIn(req,res,next){
    if(req.isAuthenticated()){
        return next();
    }
    res.render('index.ejs');
};

用于以下路线:

app.get('/SomethingForLoggedUsers', isLoggedIn, function(req,res){...

我的问题是,如果用户在网站上(由 Angular 路由器处理的部分)并且他们的会话已过期,res.render('index.ejs'); 不起作用。我的感觉是角度路由与 index.ejs 未显示这一事实有关,但我无法解决问题。有什么建议吗?

【问题讨论】:

    标签: angularjs node.js angular-routing passport.js


    【解决方案1】:

    您的解决方案的问题在于,使用 Angular,用户可能正在执行一些客户端操作,而不是在服务器上发出请求。

    在 Angular 中,我看到了解决这个问题的两种常见方法:

    在客户端完全处理这个问题,有一个开源的 ng-idle 指令可以帮助解决这个问题。当用户在客户端超时时,您可以使用护照将他们从应用程序中注销

    在服务器的支持下处理这个问题,有一个开源的 angular-http-auth 模块可以帮助处理来自服务器的 HTTP 401 / 403。这意味着您的代码可以:

    function isLoggedIn(req,res,next){
    if(req.isAuthenticated()){
        return next();
    }
        res.writeHead(401);
        res.end();
    };
    

    我希望这些信息可以帮助您了解 Angular 中的可能性。

    【讨论】:

      【解决方案2】:

      这是我解决问题的方法。

      在我的角度控制器中,我有:

      $http.get('/SomethingForLoggedUsers').success(function(data) {
      if(!data.user)$window.location.href="/login";
      

      在服务器中,每次用户未登录时,我都会返回 user:null,即:

      function isLoggedIn(req,res,next){
          if(req.isAuthenticated()){
              return next();
          }
          res.json({user:null});
      };
      

      【讨论】:

        猜你喜欢
        • 2015-09-07
        • 2017-06-15
        • 2015-05-30
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2018-03-26
        • 2016-01-01
        • 2021-07-30
        相关资源
        最近更新 更多