Javascript Angular/Express:重定向到登录后访问的最后一页

Javascript Angular/Express:重定向到登录后访问的最后一页,javascript,angularjs,node.js,express,angular-routing,Javascript,Angularjs,Node.js,Express,Angular Routing,类似的ish问题(但不适用) 在我的SPA中,我使用PassportJS来处理身份验证。我有许多需要用户登录的路由。我的路线是这样的: // ... other routing stuff when('/insights', { templateUrl: 'partials/insights', controller: 'insightsCtrl', resolve: { loggedin: checkLoggedin } }) var ch

类似的ish问题(但不适用)

在我的SPA中,我使用PassportJS来处理身份验证。我有许多需要用户登录的路由。我的路线是这样的:

// ... other routing stuff
when('/insights', {
    templateUrl: 'partials/insights',
    controller: 'insightsCtrl',
    resolve: { 
        loggedin: checkLoggedin 
    }
})

var checkLoggedin = function($q, $timeout, $http, $location, $rootScope){ 
  var deferred = $q.defer(); 
  $http.get('/loggedin').success(function(user){ 
    if (user !== '0') {
        $rootScope.user = user;
        deferred.resolve(); 
    }
    else { 
      deferred.reject(); 
      $location.url('/login'); 
    } 
  }); 
return deferred.promise; 
};
检查是否登录的我的路线:

app.get('/loggedin', function(req, res) {
    res.send(req.isAuthenticated() ? req.user : '0');
});
如果他们没有登录,他们将被重定向到
/login
。一旦成功完成,我想回到他们试图请求的原始页面


是否有内置的方法来存储用户试图访问的路由,以便在用户登录后我可以重定向到该路由?我想我可以用cookie来实现这一点,但这样做感觉有点笨拙…

您可以使用自定义回调,如passportjs中所述。 通过自定义回调,您可以将当前查询字符串发送到服务器,并在成功登录后重定向到同一查询字符串

另一种可能是使用localStorage保存当前状态,并在登录后进行保存。 您有许多模块可以使用localStorage。

除了使用自定义回调之外,没有内置的方法,但是如果您是为SPA编写这篇文章,您可以利用
$cacheFactory
创建一个服务/工厂来存储该用户的最后访问页面


$cacheFactory的限制与本地存储相同,因为它们是特定于域的,因此如果您更改域,您的本地存储将不会是相同的跨域存储。

太好了。当你说我可以向我的服务器发送查询时,这是如何实现的?如果可以的话,我宁愿不使用
angular local storage
/任何额外的模块。根据PassportJs文档,您可以向angular客户端返回重定向操作。如下所示:返回res.redirect('/users/'+user.username)。我可以在聊天中详细解释。对不起,我想问的是如何让Passport知道最初请求的角度路由(即,从角度路由内)。您可以将该路由作为参数作为查询字符串发送到express server。loggedin?当前=#我的路线#。你可以在服务器端的req.query.current.Ah访问它,愚蠢的我,忘了我可以像那样将参数传递给
req
!太棒了,谢谢你。